我如何确定正在运行的程序是否已成功崩溃或终止?
我用 运行程序,我有insystem('exe')
的源代码?'exe'
C
我更喜欢像在代码中添加一些代码这样的解决方案'exe's
。喜欢atexit(someFunction)
- 但atexit
没有工作exceptions
-。
我正在使用 Linux。
system
返回:
错误时返回的值为-1(例如,fork(2) 失败),否则返回命令的状态。后一种返回状态采用 wait(2) 中指定的格式。因此,该命令的退出代码将是 WEXITSTATUS(status)。如果 /bin/sh 无法执行,退出状态将是执行 exit(127) 的命令的状态。
因此存储system
调用的返回值,然后检查返回值。如果您的“exe”返回成功代码,您将知道它已成功终止,或者如果您的代码返回特定错误代码,那么您将知道那是什么错误,否则您可以假设代码崩溃。
正如 Ingo Leonhardt 在评论中所说,您可以使用WTERMSIG()
和WIFSIGNALED()
宏检查信号,以通过函数调用测试返回的值,system
以检查是否发生了信号,如果是,那么是哪一个。
这是一个简单的例子:
bad.c会出现段错误。
#include <stdio.h>
int main (void)
{
char *p = "Hello";
p[1] = 'X';
return 1;
}
system.c执行错误。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
int main (void)
{
int retval;
retval = system ("./bad");
if (!WIFSIGNALED(retval))
{
printf ("Process completed successfully\n");
}
else
{
switch (WTERMSIG(retval))
{
case SIGINT: printf ("SIGINT\n");
break;
case SIGSEGV: printf ("SIGSEGV\n");
break;
case SIGQUIT: printf ("SIGQUIT\n");
break;
}
}
printf ("EXIT STATUS: %d\n", WEXITSTATUS(retval));
return 0;
}
但推荐的过程是在这些情况下使用exec
family和family。wait
这些将使您更好地控制流程的执行。
看: