gpt4 book ai didi

c - 在 execl 之后处理 C 中的信号

转载 作者:太空宇宙 更新时间:2023-11-04 02:44:10 25 4
gpt4 key购买 nike

我在处理信号时遇到问题。我在终端中运行程序,按下 CTRL + C,但没有看到“我按下 CTRL-C”未打印。但我正在尝试删除行 execl("/usr/bin/gedit", "gedit", "test.c", NULL),打印了“我按下了 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);
}

参见 this question有关 forkexec 在 Unix 进程模型中如何工作的详细描述。

关于c - 在 execl 之后处理 C 中的信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29038639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com