trap和signal

在Linux上进行shell脚本开发,不可避免的需要和进程信号(signal)打交道,如杀掉(kill)、终止(terminate)、进程退出时(正常退出或异常退出)做一些操作等。

以下几点是在开发中常会碰到的情形。

1. 不论当前进程如何退出(执行完操作正常退出、被kill掉等),都希望进行一些操作(常常是做一些清理,清理掉该进程生成的一些中间数据)。可在脚本中添加以下代码

trap '' 0

2. 调起一个进程时,希望其在后台运行,这样可以保证后续的进程无须等待其完成便可被执行。可用&将进程抛至后台。此类进程会忽略掉信号INT和QUIT。

3. 在一个Terminal(如SSH的一个窗口)的命令行中调用一个进程,在该窗口被关掉时希望该进程依旧可以正常执行。以nohup的形式调用该进程即可。

nohup a.ksh

4. Ctrl-C与kill -INT的区别

The difference between sending INT using kill -INT pid and Ctrl-C is that Ctrl-C sends INT to the process group (all processes which are called by current pid)

5. 子进程并不会继承父进程的信号处理逻辑。

更多相关的资料

1. http://mywiki.wooledge.org/SignalTrap
2. http://docs.oracle.com/cd/E19253-01/816-5165/ksh-1/index.html

猜你喜欢

转载自hongboyongqi.iteye.com/blog/2062301
今日推荐