gpt4 book ai didi

c - 如何知道程序是否通过信号结束执行?

转载 作者:IT王子 更新时间:2023-10-29 00:54:12 25 4
gpt4 key购买 nike

我正在编写一个程序监视器作为操作系统类(class)的作业(虽然非常基础,就像对它的介绍)。

监视器必须做的一件事是显示它正在监视的程序的终止代码,如果它因“自然原因”结束或导致其终止的信号代码。

现在我只是在等待子进程结束它的执行,然后捕获它的终止代码。这是相关的代码片段:

pid_t id = -1;
switch (id = fork()) {
// Error when forking:
case -1:
error(-1, "Something went wrong when forking.");
exit(-1);
// Code for the child process:
case 0:
// Just launch the program we're asked to:
execvp(argv[2], &argv[2]);
// If reached here it wasn't possible to launch the process:
error(1, "Process could not be launched.");
exit(1);
// Code for the parent process:
default:
// Just wait for the child to finish its execution:
wait(&return_value);
}

error(2) 是一个记录器函数,只是为了在出现错误时简化代码。

根据流程的不同我要展示不同的语句:

Process ended: X

Process terminated with signal X.

其中 X 是终止代码或接收到的信号。我们怎么知道子进程是否因为信号而结束?

最佳答案

来自 wait(2):

   WIFSIGNALED(status)
returns true if the child process was terminated by a signal.
WTERMSIG(status)
returns the number of the signal that caused the child process to terminate.

因此您需要检查 WIFSIGNALED(return_value),如果为真,则检查 WTERMSIG(return_value)

关于c - 如何知道程序是否通过信号结束执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4507459/

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