linux后台运行进程的相关命令& ^z jobs fg bg nohup

&

&放在一条命令的最后,可以把这条命令放到后台执行。

ping blog.wanxiaohong.cn &
^z(ctrl + z)

^z可以将一个正在前台执行的命令放到后台,并且处于停止(stopped)状态。

#ping blog.wanxiaohong.cn
PING blog.wanxiaohong.cn (116.62.6.88) 56(84) bytes of data.
64 bytes from 116.62.6.88: icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from 116.62.6.88: icmp_seq=2 ttl=64 time=0.037 ms
64 bytes from 116.62.6.88: icmp_seq=3 ttl=64 time=0.049 ms
^Z
[2]+  Stopped                 ping blog.wanxiaohong.cn
jobs

jobs查看当前在后台运行的命令,jobs -l可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell会从当前的shell环境已知的列表中删除任务的进程标识。

#jobs -l
[1]- 11238 停止                  ping blog.wanxiaohong.cn
[2]+ 11240 停止                  ping blog.wanxiaohong.cn
fg

fg将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。

#fg 2
ping blog.wanxiaohong.cn
64 bytes from 116.62.6.88: icmp_seq=4 ttl=64 time=0.027 ms
64 bytes from 116.62.6.88: icmp_seq=5 ttl=64 time=0.038 ms
64 bytes from 116.62.6.88: icmp_seq=6 ttl=64 time=0.044 ms
bg

bg将一个在后台停止(stopped)的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。

#bg 1
[1]- ping blog.wanxiaohong.cn &
64 bytes from 116.62.6.88: icmp_seq=4 ttl=64 time=0.026 ms
nohup

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:

nohup command > myout.file 2>&1 &
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps命令。
#ps aux|grep 'ping'
root     12263  0.0  0.0 103468   836 pts/1    T    12:37   0:00 ping blog.wanxiaohong.cn
root     13980  0.0  0.0 103468   840 pts/2    S    12:49   0:00 ping blog.wanxiaohong.cn
#a:显示所有程序 u:以用户为主的格式来显示 x:显示所有程序,不以终端机来区分
kill

干掉jobs任务的方法:kill PID 前台进程的终止:^c(Ctrl+c)

评论

评论正在提交中...请稍后
评论提交成功...