1 Linux 后台运行指令
1.1 nohup (No Hangups)
nohup 命令表示"No Hangups",告诉Linux这个任务不要挂起,一直运行结束为止,即使当前用户登出.也就是说,即使用户登出服务器,或者关闭了终端,这个指令还是能够一直运行到结束为止.
使用方法如下:
(venv) [root@iZm5eak0zgdsr4c0pe7vikZ ClassifyWeb]# nohup python run.py &
注意:末尾的&表示将这条命令放到后台执行,不占用终端(所以,我们可以继续在终端做其他事情).
一次完整的演示:
我们ssh登录到服务器上去,执行下面的命令:
(venv) [root@iZm5eak0zgdsr4c0pe7vikZ ClassifyWeb]# nohup python run.py &
[1] 21335
产生的输出保存到文件nohup.out中
(venv) [root@iZm5eak0zgdsr4c0pe7vikZ ClassifyWeb]# nohup: ignoring input and appending output to ‘nohup.out’
查看后台执行的命令
(venv) [root@iZm5eak0zgdsr4c0pe7vikZ ClassifyWeb]# jobs
[1]+ Running nohup python run.py &
注意:使用exit来退出终端,而不是直接关掉终端窗口.因为,后者会导致nohup提交的任务被系统结束.
(venv) [root@iZm5eak0zgdsr4c0pe7vikZ ClassifyWeb]# exit
logout
Connection to 120.27.12.83 closed.
1.2 &
用在一个命令的最后,可以把这个命令放到后台执行
(proenv) hu@hu-D520MT-K:~$ ls -al &
[1] 19470
1.3 ctrl + z, bg
可以将一个正在前台执行的命令放到后台.
ctrl + z
将指令放到后台,并暂停.
bg
将指令放到后台继续运行
比如查找一个文件,很耗时,忘了将其放入后台运行,怎么办呢?很简单,先ctrl+z将其暂停,然后bg使其后台继续运行.
# find / -ctime -1 > /tmp/changed-file-list.txt
# [CTRL-Z]
[1]+ Stopped find / -ctime -1 > /tmp/changed-file-list.txt
(proenv) hu@hu-D520MT-K:~$ bg
[1]+ find / -ctime -1 > /tmp/changed-file-list.txt &
(proenv) hu@hu-D520MT-K:~$ jobs
[1]+ Running find / -ctime -1 > /tmp/changed-file-list.txt &
1.4 fg
将后台中的命令调至前台继续运行.
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid).
# jobs
[1] Running bash download-file.sh &
[2]- Running evolution &
[3]+ Done nautilus .
# fg %1
1.5 jobs
查看当前有多少在后台运行的命令
# jobs
[1] Running bash download-file.sh &
[2]- Running evolution &
[3]+ Done nautilus .
1.6 kill
杀掉一个后台运行的指令
# kill %2