工作处理
创造就业机会
要创建作业,只需在命令后附加一个 &
:
$ sleep 10 &
[1] 20024
你还可以通过按 Ctrl + 使正在运行的进程成为作业 z :
$ sleep 10
^Z
[1]+ Stopped sleep 10
背景和前景一个过程
要将 Process 置于前台,命令 fg
与%
一起使用
$ sleep 10 &
[1] 20024
$ fg %1
sleep 10
现在你可以与流程进行交互。要将其恢复到后台,你可以使用 bg
命令。由于占用终端会话,你需要先按 Ctrl + 停止该过程 z。
$ sleep 10
^Z
[1]+ Stopped sleep 10
$ bg %1
[1]+ sleep 10 &
由于某些程序员的懒惰,如果只有一个进程,或者对于列表中的第一个进程,所有这些命令也可以使用单个%
。例如:
$ sleep 10 &
[1] 20024
$ fg % # to bring a process to foreground 'fg %' is also working.
sleep 10
要不就
$ % # laziness knows no boundaries, '%' is also working.
sleep 10
此外,只需键入 fg
或 bg
而不需要任何参数即可处理上一个作业:
$ sleep 20 &
$ sleep 10 &
$ fg
sleep 10
^C
$ fg
sleep 20
杀死正在运行的工作
$ sleep 10 &
[1] 20024
$ kill %1
[1]+ Terminated sleep 10
睡眠过程在后台运行,进程 ID 为(pid)20024
,作业号为 1
。要引用该过程,你可以使用 pid 或作业号。如果你使用作业编号,则必须在其前面添加%
。kill
发送的默认 kill 信号是 SIGTERM
,它允许目标进程正常退出。
一些常见的杀伤信号如下所示。要查看完整列表,请运行 kill -l
。
信号名称 | 信号值 | 影响 |
---|---|---|
SIGHUP |
1 |
挂断 |
SIGINT |
2 |
键盘中断 |
SIGKILL |
9 |
杀死信号 |
SIGTERM |
15 |
终止信号 |
启动并终止特定进程
杀死正在运行的进程的最简单方法可能是通过进程名称选择它,如下例所示,使用 pkill
命令
pkill -f test.py
(或)使用 pgrep
搜索实际进程 ID 的更简单方法
kill $(pgrep -f 'python test.py')
使用 grep
over ps -ef | grep name_of_process
可以获得相同的结果,然后杀死与得到的 pid 相关的过程(进程 id)。在测试环境中使用其名称选择进程非常方便,但在生产中使用脚本时可能非常危险:实际上不可能确定名称是否与你实际想要杀死的进程相匹配。在这些情况下,以下方法实际上是安全的。
使用以下方法启动最终将终止的脚本。让我们假设你要执行并最终杀死的命令是 python test.py
。
#!/bin/bash
if [[ ! -e /tmp/test.py.pid ]]; then # Check if the file already exists
python test.py & #+and if so do not run another process.
echo $! > /tmp/test.py.pid
else
echo -n "ERROR: The process is already running with pid "
cat /tmp/test.py.pid
echo
fi
这将在/tmp
目录中创建一个包含 python test.py
进程的 pid 的文件。如果文件已存在,我们假设该命令已在运行且脚本返回错误。
然后,当你想杀死它时,使用以下脚本:
#!/bin/bash
if [[ -e /tmp/test.py.pid ]]; then # If the file do not exists, then the
kill `cat /tmp/test.py.pid` #+the process is not running. Useless
rm /tmp/test.py.pid #+trying to kill it.
else
echo "test.py is not running"
fi
这将完全杀死与你的命令关联的进程,而不依赖于任何易失性信息(如用于运行命令的字符串)。即使在这种情况下,如果文件不存在,脚本也会假定你要终止未运行的进程。
最后一个示例可以轻松改进,以便多次运行相同的命令(例如,附加到 pid 文件而不是覆盖它),并管理进程在被杀死之前死亡的情况。