Shell脚本中的进程处理与优化
1. trap命令与信号处理
在shell脚本中,信号处理是一个重要的部分。disown命令的-h选项和nohup有相似的功能,它能在特定情况下让shell阻止挂起信号(hangup signal)到达进程。不过和nohup不同的是,你需要自己指定进程输出的位置。
disown还提供了另外两个有用的选项:
--a:在没有其他参数时,将操作应用到shell拥有的所有作业。
--r:仅对当前正在运行的作业执行相同操作。
当给trap命令的参数为一个短横线-时,会出现另一种“特殊情况”。这会将接收到信号时采取的动作重置为默认动作,通常是终止进程。
下面以一个邮件程序为例,在用户发送完消息后,临时文件会被删除。此时不再需要清理操作,就可以将信号陷阱重置为默认状态,代码如下:
trap abortmsg INT trap cleanup TERM msgfile=/tmp/msg$$ cat > $msgfile # send the contents of $msgfile to the specified mail address... rm $msgfile trap - INT TERM最