当前位置: 首页 > 面试题库 >

ctrl + c会将SIGINT信号发送到Linux中的父进程和子进程吗?

寇景明
2023-03-14
问题内容

在终端中,我执行了一个主父进程,该进程将派生一个子进程。在父进程和子进程中,我都实现了SIGINT信号处理程序。因此,当我按“ ctrl +
c”时,是否将同时调用两个处理程序?还是我需要在父进程的处理程序中显式调用子进程的信号处理程序?

我查看了这篇文章: Ctrl-C如何终止子进程?表示“ SIGINT信号由终端线路规则生成,并广播到终端的 前台
进程组中的所有进程
”。我只是不太了解“前台流程组”的含义。

谢谢,


问题答案:

在父进程和子进程中,我都实现了SIGINT信号处理程序。因此,当我按“ ctrl + c”时,是否将同时调用两个处理程序?

是的,他们俩都会收到SIGINT

还是我需要在父进程的处理程序中显式调用子进程的信号处理程序?

“调用”另一个进程的信号处理程序没有任何意义。如果两者都安装了处理程序,那么一旦接收到信号,它们就会被调用SIGINT

我只是不太了解“前台流程组”的含义。

通常,与控制终端关联的进程是前台进程,其进程组称为 前台进程组。 从命令行启动进程时,它是前台进程:

例如

$ ./script.sh # foreground process
$ ./script & # background process

我建议您阅读ttyThe TTY demystified进行详细说明。



 类似资料:
  • 我创建了基于JAVA SWT的GUI,它可以与外部C可执行文件进行交互。我的GUI使用ProcessBuilder调用这个c进程。在C进程可执行文件中,我重载了信号函数(CTRL C,CTRL D)。我的问题是如何从JavaSWTGUI向这个外部C进程发送CTRL C?我试过了。getRuntime()。链接中提供了exec((kill SIGINT pid):“如何将SIGINT信号从Java发

  • 问题内容: 我有一个使用Qt Framework的简单程序。它使用QProcess执行RAR并压缩一些文件。在我的程序中,我正在捕获并在发生代码时做一些事情: 当发生时,我检查RAR进程是否完成,如果不是,我将等待它……问题是(我认为)RAR进程也得到了我的程序所需要的,并且在压缩之前退出了所有的文件。 有没有一种方法可以运行RAR进程,以便在程序接收到它时不接收它? 谢谢 问题答案: 如果要在U

  • 我正在使用Javaexec运行bash脚本,但当我进入CTRL C时,Java进程将退出,子进程也将退出,如何在JVM关闭后保持子进程运行? 父母亲上海: 我已经在这里和这里阅读了类似问题的答案,例如,使用nohup在脚本运行命令中启动父bash脚本,或者使用trap命令来阻止信号,在我的研究中,它可以工作,例如“tail-f somefile”,但不适用于我的用例“ffmpeg-params”,

  • 问题内容: 我有一个Java应用程序。我想知道发送此信号的进程的pid。 那可能吗? 问题答案: 两种Linux专用方法是和,它们允许程序接收有关已发送信号的 非常 详细的信息,包括发送方的PID。 调用并传递给它,其中包含所需的信号处理程序,并且设置了标志。使用此标志,您的信号处理程序将接收 三个 参数,其中一个是包含发送者的PID和UID的结构。 从中调用和读取结构(通常以某种选择/轮询循环的

  • 问题内容: 如何在多进程python程序中捕获+ ,并正常退出所有进程,我需要在Unix和Windows上均可使用的解决方案。我尝试了以下方法: 这是可行的,但我认为这不是正确的解决方案。 问题答案: 正确的方法来处理/用是: 在创建流程之前,请忽略该流程。这样创建的子进程继承了处理程序。 创建a之后,在父进程中还原原始处理程序。 使用和代替阻塞和。 等待结果超时,因为默认阻塞将等待忽略所有信号。

  • 我尝试使用C语言中的< code>fork()函数处理Linux中的多个进程,这是我的代码: 现在让我们假设父进程ID为100,两个子进程(p1, p2)ID为101 相反,我看到了一些不同的东西,两个子进程具有相同的PPID,但第一个进程具有与之不同的PID。这是我得到的示例输出: 我的问题是,两个子进程的父PID不应该是3383吗?希望有人能解释这一切在这里是如何运作的,以及我做错了什么(或想