在 execl 之后处理 C 中的信号
Handling signals in C after execl
我在处理信号时遇到问题。我在终端中 运行 程序,按了 CTRL + C,但没有看到 "I am pressed CTRL-C" 未打印。但我正在尝试删除行 execl("/usr/bin/gedit", "gedit", "test.c", NULL)
,"I am pressed CTRL-C" 已打印。
请问如何打印"I am pressed CTRL-C"并说明原因。感谢您的帮助。非常感谢。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
int loop_forever = 1;
void on_sigint()
{
printf("\nI am pressed CTRL-C\n");
loop_forever = 0;
}
int main()
{
printf("My homework\n");
execl("/usr/bin/gedit", "gedit", "test.c", NULL);
signal(SIGINT, on_sigint);
while (loop_forever)
{
}
exit(1);
}
execl
执行另一个程序 代替 你的程序。
基本上,它将您的流程转换为 gedit
流程。您的代码将不再执行,gedit 将 运行 取而代之。
要运行另一个程序与你的程序分开,你可以使用
if(!fork()) {
execl("/usr/bin/gedit", "gedit", "test.c", NULL);
}
有关 fork
和 exec
如何在 Unix 进程模型中工作的详细说明,请参阅 this question。
我在处理信号时遇到问题。我在终端中 运行 程序,按了 CTRL + C,但没有看到 "I am pressed CTRL-C" 未打印。但我正在尝试删除行 execl("/usr/bin/gedit", "gedit", "test.c", NULL)
,"I am pressed CTRL-C" 已打印。
请问如何打印"I am pressed CTRL-C"并说明原因。感谢您的帮助。非常感谢。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
int loop_forever = 1;
void on_sigint()
{
printf("\nI am pressed CTRL-C\n");
loop_forever = 0;
}
int main()
{
printf("My homework\n");
execl("/usr/bin/gedit", "gedit", "test.c", NULL);
signal(SIGINT, on_sigint);
while (loop_forever)
{
}
exit(1);
}
execl
执行另一个程序 代替 你的程序。
基本上,它将您的流程转换为 gedit
流程。您的代码将不再执行,gedit 将 运行 取而代之。
要运行另一个程序与你的程序分开,你可以使用
if(!fork()) {
execl("/usr/bin/gedit", "gedit", "test.c", NULL);
}
有关 fork
和 exec
如何在 Unix 进程模型中工作的详细说明,请参阅 this question。