我有一个 perl 脚本,它间接调用mysql
(执行长 SQL 脚本)。我想在该脚本运行时禁用Ctrl+ C,但不知何故信号仍然到达mysql
,然后显示“Ctrl-C - 查询已终止。正常继续。” (我相信这是来自mysql
)
我有:
- 将其设置
$SIG{INT}
为“IGNORE”——事实上,Perl 脚本会继续运行 - 在 Perl 脚本上设置一个进程组——实际上,
ps -e -o uid,pid,ppid,pgid,command
显示它mysql
与我的 Perl 脚本位于同一进程组中 mysql
在这两者发生后调用。
为什么该信号仍然会到达进程mysql
,我该如何防止这种情况发生?
答案1
如果您SIG_IGN
编写代码(例如https://stackoverflow.com/questions/3232613/how-to-stop-sigint-being-passed-to-subprocess-in-python) 或在 shell 中使用trap
,如我们如何在bash中将信号陷阱设置为SIG_IGN和SIG_DFL?,我认为在 Perl 中这是perlipc
图书馆https://metacpan.org/pod/perlipc,IPC 是进程间通信
您还可以选择将字符串“IGNORE”或“DEFAULT”指定为处理程序,在这种情况下,Perl 将尝试丢弃信号或执行默认操作。