在信号处理程序中,我看到system()
用于调用一些shell命令,比如
void
sig_handler(int signum) {
system("command1");
system("command2");
system("command3");
signal(signum, SIG_DFL);
}
以这种方式在信号处理程序(绑定到SIGSEGV
,SIGABRT
,SIGBUS
...)中进行调用是否安全,然后调用默认处理程序?
或者它取决于被调用的命令?
答案 0 :(得分:1)
system
调用未记录为从信号处理程序调用是安全的(或者至少我找不到这样的文档),所以我得出结论,这段代码不能保证是安全的。< / p>
但是,fork
,execve
,waitpid
和signal
都记录在案是安全的,所以我认为该代码的功能原则上应该是安全的,如果使用fork
/ exec
/ waitpid
而不是system
来实施。