前言
过程是正在运行的程序,Linux零碎通常有数百个过程同时运行。本文就来介绍下Linux是如何进行过程治理的。
咱们能够看到:
- 查看过程(Viewing processes)
- 查找过程(Finding processes)
- 治理过程(Managing processes)
- 过程的优先级(Prioritizing processes)
- 杀死过程(Killing processes)
- 在后盾运行过程(Running processes in the background)
- 调度过程(Scheduling processes)
查看过程
ps
Linux内核在创立过程时,会按程序给每个过程调配一个惟一的过程ID(PID)。一般来说,在过程上执行任何操作,咱们必须指定PID,有时咱们能够应用名称。
ps
命令是查看过程的次要工具。不应用任何选项来运行该命令,会列出以后登录用户所启动(调用)的过程,以及终端上正在运行的过程。
如果咱们增加了aux
选项:
a
= 显示所有用户的过程u
= 显示过程的用户/所有者x
= 显示未连贯到终端的过程
过程依照它们被启动的程序进行展现,因而你会看到列表是依据PID进行排序的。
让咱们简略来看看上面几列的信息:
USER
:调用过程的用户。PID
:过程的ID。%CPU
:过程占用CPU的百分比。%MEM
:过程占用内存的百分比。COMMAND
:启动过程的命令。
查找命令
grep
咱们能够应用grep
命令来查找指定的过程,假如咱们想要查找所有名称中蕴含mfsconsole
的过程。
ps aux | grep msfconsole
top
咱们能够应用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 -n1 free
来展现零碎内存应用状况的细节。在左边,我让top
命令运行,你能够看到watch
命令的PID
是9717,nice
的值为0。
让咱们继续执行watch
命令,只不过这次是用nice
命令。
nice -15 watch -n1 free
当初咱们能够看到watch
的nice
值为15。这里要牢记的几件事:
- 这个
watch
命令的PID
与之前的watch
命令不同。这是因为nice
会启动一个新的过程,而不是更改一个现有的过程。 nice
命令前面的-15
意味着15
。如果咱们想要指定一个正数(高优先级),咱们能够应用双中划线-
。- 上面是执行
sudo nice --10 watch -n1 free
后的样子。是的,如果你要进步优先级,你必须应用sudo
。任何人都能够升高优先级,但只有sudo
能够进步优先级。
扭转优先级
renice
命令接管-20
到19
的绝对值,并接管过程的PID
。
让咱们再次运行watch
命令。
watch -n1 free
让咱们来查看下nice
值,既然咱们没有指定nice
值,它应该为0。比起应用top
,这里我将会应用ps
和grep
,用以简化输入。
咱们能够看到,第八列的值为0,该值为nice
的值,PID
的值位于第三列。让咱们应用renice
试试:
sudo renice -15 14318
咱们能够看到,当初nice
的值是-15。咱们也能够应用top
工具来扭转nice
值。
在top
中,按下R
键,并提供一个PID
:
按下回车键,并提供一个新的nice
值:
top
胜利的扭转了nice
值:
杀死过程
kill
你能够通过kill
命令来进行一个有问题的过程。kill
命令有64种不同的kill
信号,以及语法是kill -signal PID
。如果没有显示的提供信号位,将会默认为SIGTERM
。这里我将重点介绍以下几种:
信号名称 | 数值 | 形容 |
---|---|---|
SIGHUP | 1 | 挂断(HUP)信号。它进行指定的过程,并以雷同的PID重新启动它。 |
SIGINIT | 2 | 中断(INT)信号。这是一个强劲的kill信号,不保障能起作用,但的确有这样的状况。 |
SIGQUIT | 3 | 外围转储。终止过程并将过程信息保留在内存中,而后它将这些信息保留在当前工作目录下一个名为core的文件中。 |
SIGTERM | 15 | 终止(TERM)信号。它是kill命令的默认kill信号。 |
SIGKILL | 9 | 这是一个相对的kill信号。它通过将过程的资源发送到一个非凡的设施/dev/null来迫使过程进行。 |
上面的命令会通过HUP信号来重启咱们的watch
命令。
kill -1 14318
上面的命令会确保过程被终止。
kill -9 16318
如果咱们不晓得PID
,咱们能够应用killall
命令,它接管过程的名称。
killall -9 watch
在后盾运行过程
&
当你执行一个命令时,shell
会进行期待,直到命令实现后才提供另一个命令提醒。咱们能够在后盾运行一个过程,它将持续运行而不须要终端,把终端腾出来做其余工作。咱们在命令的开端增加&
来做到这一点。
geany sample.txt &
geany
不再占用整个终端。
fg
咱们如何让它回到前台?能够应用带有PID的fg
命令。
fg 18345
bg
你也能够应用bg
命令来挪动一个过程到后盾。
bg 18345
调度过程
在Linux中,咱们能够应用at
和crond
来调度过程。crond
有点简单,这里重点介绍at
。
at
at
命令对于安顿一项工作在将来某个工夫点运行一次很有用。它设置了atd
守护过程。守护过程是一个位于后盾的程序,在没有任何用户界面的状况下做本人的事件。
上面是at
命令执行过程的工夫的语法,工夫能够以多种格局提供。
工夫格局 | 含意 |
---|---|
at 7:20pm | Run at 7:20 PM of current day. |
at 7:20pm June 25 | Run at 7:20 PM on June 25 |
at now + 20 minutes | Run in 20 minutes |
at 7:25pm 06/10/2021 | Run at 7:25 pm on June 10, 2021 |
at noon
咱们能够看到,at
将咱们带入了交互模式,在这里咱们输出了咱们心愿在指定工夫执行的命令。实现后按下CTRL+D。
atq
应用atq
来列举出所有预约的at
工作。