前言一个进程就是一个正在运行的程序,一个Linux系统通常有上百个进程同时运行。本文将介绍Linux是如何处理进程的。我们可以看到:ViewingprocessesFindingprocessesManagingprocessesPrioritizingprocesseskillingprocessesRunningprocessesinthebackgroundSchedulingProcess(调度进程)查看进程psLinux内核在创建进程时,会依次为每个进程分配一个唯一的进程ID(PID).通常,要对进程执行任何操作,我们都必须指定PID,有时我们可以使用名称。ps命令是查看进程的主要工具。不带任何选项运行此命令会列出当前登录用户启动(调用)的进程,以及在终端上运行的进程。如果我们添加aux选项:a=显示所有用户的进程u=按用户/所有者显示进程x=显示未连接到终端的进程进程按启动顺序显示,因此您会看到列表基于在PID上排序。让我们简单看一下以下列中的信息:USER:调用流程的用户。PID:进程的ID。%CPU:进程占用的CPU百分比。%MEM:进程占用的内存百分比。COMMAND:启动进程的命令。查找命令grep我们可以使用grep命令来查找指定的进程,假设我们要查找名称中包含mfsconsole的所有进程。ps辅助|grepmsfconsoletop我们可以使用top命令动态列出按资源使用情况排序的进程,从最大的开始。默认情况下,列表每3秒刷新一次。top管理进程优先级内核对进程的优先级有最终决定权,但是我们可以使用nice命令来建议提高进程的优先级。nice命令的值范围从-20(最有可能获得优先权)到+19(最不可能获得优先权)。较高的nice值转化为低优先级,较低的nice值转化为高优先级。进程启动时,所有标准进程都以nice值0开始。我们可以使用nice命令设置进程启动时的nice值,也可以使用renice调整正在运行的进程的nice值。当我们使用nice命令启动进程而不提供任何值时,默认的nice值为10。nice命令要求您增加nice值,renice命令需要一个绝对nice值。设置优先级我们可以使用nice命令来调整程序的nice值。这允许我们增加或减少内核赋予该进程相对于其他进程的优先级。在左侧,我运行watch-n1free以显示系统内存使用情况的详细信息。右边,我让top命令运行,可以看到watch命令的PID是9717,nice的值为0。我们继续watch命令,不过这次是nice命令。nice-15watch-n1free现在我们可以看到watch的nice值为15。这里要记住几件事:这个watch命令与前面的watch命令有不同的PID。这是因为nice启动了一个新进程,而不是更改现有进程。nice命令后面的-15表示15。如果我们想指定一个负数(高优先级),我们可以使用双破折号-。这是执行sudonice--10watch-n1free后的样子。是的,如果你想提高优先级,你必须使用sudo。任何人都可以降低优先级,但只有sudo可以提高它。changepriorityrenice命令接受从-20到19的绝对值,并接收进程的PID。让我们再次运行watch命令。watch-n1free让我们检查一下nice值,因为我们没有指定nice值,它应该是0。这里我将使用ps和grep来简化输出,而不是使用top。我们可以看到第八列的值为0,也就是nice的值,PID的值在第三列。让我们用renice试试:sudorenice-1514318我们可以看到nice的值现在是-15。我们还可以使用top工具来更改nice值。在顶部,按R键,并提供一个PID:按回车键,并提供一个新的nice值:top成功更改了nice值:杀死进程kill您可以使用kill命令停止有问题的进程。kill命令有64种不同的kill信号,语法是kill-signalPID。如果未明确提供信号位,则默认为SIGTERM。这里我将重点介绍以下内容:信号名称值说明SIGHUP1挂断(HUP)信号。它停止指定的进程并使用相同的PID重新启动它。SIGINIT2中断(INT)信号。这是一个微弱的终止信号,不能保证有效,但确实会发生。SIGQUIT3核心转储。终止进程并将进程信息保存在内存中,然后将这些信息保存在当前工作目录下名为core的文件中。SIGTERM15终止(TERM)信号。它是kill命令的默认终止信号。SIGKILL9这是一个绝对终止信号。它通过将资源发送到特殊设备/dev/null来强制进程停止。以下命令将使用HUP信号重新启动我们的watch命令。kill-114318以下命令将确保进程终止。kill-916318如果我们不知道PID,我们可以使用killall命令,它接收进程的名称。killall-9watch在后台运行进程,当您执行命令时,shell会等待命令完成,然后再提供另一个命令提示符。我们可以在后台运行一个进程,它会在没有终端的情况下继续运行,从而腾出终端用于其他工作。我们通过在命令末尾添加&来做到这一点。geanysample.txt&geany不再占用整个终端。fg我们如何将它带回前台?您可以将fg命令与PID一起使用。fg18345bg您也可以使用bg命令将进程移至后台。bg18345调度进程在Linux中,我们可以使用at和crond来调度进程。crond有点复杂,这里我们重点说说at。atat命令对于安排作业在未来某个时间点运行很有用。它设置atd守护进程。守护进程是一个位于后台并在没有任何用户界面的情况下执行其操作的程序。下面是at命令执行过程的时间语法,可以提供多种格式的时间。时间格式含义at7:20pmRunat7:20PMoftheday.at7:20pmJune25Runat7:20PMonJune25atnow+20minutesRunin20minutesat7:25pm06/10/2021Runat7:25pm2021年6月10日中午,我们可以看到at将我们带入交互模式,在该模式下我们输入要在指定时间执行的命令。完成后按CTRL+D。atq使用atq列出所有预定的at作业。
