防止SIGINT到达mysql子进程

防止SIGINT到达mysql子进程

我有一个 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 将尝试丢弃信号或执行默认操作。

来源:https://www.mkssoftware.com/docs/man5/perlipc.5.asp

相关内容