可靠运行Linux进程
2020年4月25日更新:
- screen中若中文乱码,可以添加-U参数指定UTF-8编码。
- CTRL-a d的实际操作方法为按住CTRL后再依次按下a与d。
概览
进几日在运行zmap扫描的时候,zmap进程总会随着终端的退出而停止。究其原因,即是终端关闭时候的HUP(hangup)信号影响了该终端所在的会话下的全部进程,也就是说,bash等进程会被清除。
解决办法既有两个:
·忽略系统发出的HUP信号。
·使进程成为其它会话下的子进程并不再接收当前会话的HUP信号。
忽略HUP信号
nohup
1 | root@raincorn:~# nohup --help |
(以上为nohup的帮助页面)
例:
1 | nohup ping g.cn & |
此处的&代表将命令在后台运行,若要结束进程,可以使用ps -ef |grep ping来查找执行ping的进程,再使用kill pid来结束进程。
disown
例disown -h %1
用disown -h jobspec来使某个进程忽略HUP信号。
用disown -ah 来使所有的进程都忽略HUP信号。
用disown -rh 来使正在运行的进程忽略HUP信号。
在前台执行命令后,可以考虑将其放到后台并挂起,待查阅到相应的进程信息后再恢复并作处理。
其中:
jobs—查看后台进程
ctrl+z —将当前进程挂起到后台
ctrl+c—取消前台进程
bg %n—继续执行后台进程(其中n为进程编号,通过jobs获取)
fg %n—将后台进程移至前台。
kill %n—结束进程编号为n的进程
转移进程会话
setsid
例setsid ping raincorn.top
运行之后发现进程的PPID变为init,也就是说,此时的进程在终端会话的父进程之外,此时的HUP信号自然不会影响我们所需要的进程。
&
例(ping raincorn.top &)
此时的现象与执行setsid类似,处理后的进程被置于终端子进程之外。
screen
screen可以提供一个伪全屏终端,可以在screen提供的终端下进行操作,此时的进程便被置于screen的子目录下,不受终端HUP信号影响,由于软件的管理特性,因此适于大批量处理命令。
用screen -dmS session name来建立一个处于断开模式下的会话(并指定其会话名)。
用screen -list 来列出所有会话。
用screen -r session name来重新连接指定会话。
用快捷键CTRL-a d 来暂时断开当前会话。
总结
·nohup,setside,&的使用适用于小批量并在命令执行的时候使用。
·当执行对应命令之后则需使用disown进行补救。
·对于大批量的命令要求,则可以使用screen,在不同子会话下创建不同进程并可以来回切换。
本文标题:可靠运行Linux进程
文章作者:Raincorn
发布时间:2018-08-02
最后更新:2020-07-28
原始链接:https://blog.raincorn.top/2018/08/02/Reliabled_Linux/
版权声明:本文采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可