我想要一个包装程序来运行给定的命令并设置信号处理程序,以便在命令接收到指定的信号时运行它。
问题是这样的:
- 有一个实用程序可以做到这一点吗?
- 如果没有,是否可以使用 bash 的命令
trap
和来做到这一点exec
? - 如果没有,我该怎么做? (例如,我自己用 C 编写一个程序,执行一些系统调用)
编辑:目标平台是GNU/Linux。
编辑2:按照Ignacio的回答,我设法编写了一个预加载SO,看起来像这。
答案1
做不到。从exec(3p)
手册页:
设置为由调用过程映像捕获的信号应设置为新过程映像中的默认操作。
您必须编写一个预加载 SO,它将在程序启动之前连接信号处理程序。
答案2
你只能让它忽略信号 ( SIG_IGN
);您将无法从 shell ( trap
) 或 C 程序 ( signal(2)
) 中提供信号处理程序。当调用 exec 时,任何信号处理程序都将被替换。
例子:
:
trap "" 1 2
exec sleep 100000
然后在后台或前台调用该程序,并向该程序发送SIGHUP
或。SIGINT
它被忽略。将代码放入陷阱会导致信号在 exec 上重置:
:
trap "echo signal caught" 1 2
exec sleep 10000
这不会打印您发送信号的“信号捕获”,但实际上会终止程序。