📜  按下Ctrl + Z时不挂起的C程序(1)

📅  最后修改于: 2023-12-03 15:10:08.352000             🧑  作者: Mango

按下Ctrl + Z时不挂起的C程序

在一个Linux命令行界面下,按下“Ctrl + Z”会将当前进程放到后台运行,进而允许你继续使用控制台。不过,有些 C 程序可能无法在后台继续运行,同样也会被挂起。

本文提供一种方法,可以让这样的 C 程序在按下“Ctrl + Z”时不挂起,继续在后台运行。

原因

当按下“Ctrl + Z”时,终端会发送一个 SIGSTOP 信号给当前进程。这个信号会暂停进程的运行,直到一个 SIGCONT 信号接收方(一般是 shell 进程)将其再次恢复。

由于某些 C 程序未捕获 SIGCONT 信号,因此当它们被挂起时,它们无法在后台继续运行。

因此,我们需要在程序正确地处理 SIGCONT 信号的前提下,才能确保它在按下“Ctrl + Z”时不会挂起。

创建一个不挂起的 C 程序

首先,在你的 C 程序中添加如下代码,以处理 SIGCONT 信号:

#include <signal.h>

void continue_program(int signal) {
    // Do nothing
}

int main() {
    // Register SIGCONT signal handler
    signal(SIGCONT, continue_program);

    // The rest of your program
    return 0;
}

这将注册一个空 SIGCONT 信号处理程序 continue_program(),使得你的程序能够正确响应该信号。

紧接着,我们需要将程序放到后台运行。为了做到这点,可以在终端中运行以下命令:

$ ./your_program &

在此之后,你可以按下“Ctrl + Z”,并在终端输入 bg 以将程序移动到后台运行。

这样,你的 C 程序就不会被挂起,可以在后台继续运行。

总结

当你的 C 程序需要在后台继续运行时,要确保它可以正确地处理 SIGCONT 信号。通过将程序放到后台运行,并使用 bg 命令,你的程序就可以在按下“Ctrl + Z”时不挂起。

希望这篇文章能够帮助你解决一些在后台运行 C 程序的问题。