📅  最后修改于: 2023-12-03 15:10:08.352000             🧑  作者: Mango
在一个Linux命令行界面下,按下“Ctrl + Z”会将当前进程放到后台运行,进而允许你继续使用控制台。不过,有些 C 程序可能无法在后台继续运行,同样也会被挂起。
本文提供一种方法,可以让这样的 C 程序在按下“Ctrl + Z”时不挂起,继续在后台运行。
当按下“Ctrl + Z”时,终端会发送一个 SIGSTOP 信号给当前进程。这个信号会暂停进程的运行,直到一个 SIGCONT 信号接收方(一般是 shell 进程)将其再次恢复。
由于某些 C 程序未捕获 SIGCONT 信号,因此当它们被挂起时,它们无法在后台继续运行。
因此,我们需要在程序正确地处理 SIGCONT 信号的前提下,才能确保它在按下“Ctrl + Z”时不会挂起。
首先,在你的 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 程序的问题。