进程、后台进程以及信号

等待 stdin


[ian@echidna ian]$ (date; cat - >bginput.txt; date)&
[1] 18648
[ian@echidna ian]$ Fri Nov 11 00:03:28 EST 2005


[1]+ Stopped ( date; cat - >bginput.txt; date )
[ian@echidna ian]$ fg
( date; cat - >ginput.txt; date )
input data
Fri Nov 11 00:03:53 EST 2005
[ian@echidna ian]$ cat bginput.txt
input data


nohup

nohup 命令用于启动一个命令,它将忽略 hangup 信号并将 stdout 和 stderr 附加到文件。默认文件是 nohup.out 或 $HOME/nohup.out。如果文件不可写,那么命令将不运行。如果希望将输出发送到别处,那么对 stdout 或 stderr 进行重定向。

 

top

如果需要多次运行 ps 来查看变化,那么可能需要使用 top 命令。它显示不断更新的进程列表,以及有用的总结信息。

 

使用 kill 发送信号

kill 命令向指定的作业或进程发送信号。清单显示使用 SIGTSTP 和 SIGCONT 信号停止并恢复后台作业。使用 SIGTSTP 信号相当于使用 fg 命令将作业带到前台,然后使用 Ctrl-z 暂停它。使用 SIGCONT 相当于使用 bg 命令。

 

 清单停止并重新启动后台作业



[ian@echidna ian]$ kill -s SIGTSTP %1
[ian@echidna ian]$ jobs -l
[1]+ 21709 Stopped nohup sh pmc.sh
[2]- 21719 Running nohup bash pmc.sh &
[ian@echidna ian]$ kill -s SIGCONT %1
[ian@echidna ian]$ jobs -l
[1]+ 21709 Running nohup sh pmc.sh &
[2]- 21719 Running nohup bash pmc.sh &

 

 

nohup 命令使进程对于 SIGHUP 信号“免疫”。一般情况下,进程可以实现信号处理程序捕获 信号。所以进程可以实现一个信号处理程序来捕获 SIGINT 或 SIGTERM。因为信号处理程序知道信号已经发送了,它可以选择采取什么操作,例如忽略 SIGINT,只在收到 SIGTERM 时终止进程。

 

无条件终止进程

某些信号不能被捕获,比如某些硬件异常。SIGKILL 不能被捕获,它会无条件地终止进程。一般来说,只有在其他方式都无法终止进程时才需要发送这个信号。

 

 

posted @ 2008-08-18 19:34  xiaoyixy  阅读(296)  评论(0编辑  收藏  举报