QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1143|回复: 4

捕获进程退出状态

[复制链接]
发表于 2005-5-5 09:25:40 | 显示全部楼层 |阅读模式
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
        pid_t pid=fork();
        if(pid==0)
        {
                exit(5);
        }
        else if(pid>0)
        {
                int status;
                int option=WUNTRACED;
                waitpid(pid,&status,option);
                if(WIFEXITED(status))
                        printf("return(exit) code is %d\n",WEXITSTATUS(status));

                if(WIFSIGNALED(status))
                        printf("term signal's ID is %d\n",WTERMSIG(status));

                if(WIFSTOPPED)//you must use WUNTRACED as a param in waitpid
                        printf("stop sigal's id is %d\n",WSTOPSIG(status));
        }
}

程序运行结果:return(exit) code is 5,请问如果要让它出现后面两种结果,该怎样编程阿,谢谢
发表于 2005-5-5 09:59:19 | 显示全部楼层
2. 在子进程中执行 abort();或除0等。
3. 在父进程中 kill(pid,SIGSTOP)。
回复

使用道具 举报

 楼主| 发表于 2005-5-5 11:16:29 | 显示全部楼层
2. 在子进程中执行 abort();或除0等。
3. 在父进程中 kill(pid,SIGSTOP)。
多谢sagaeon哥的指教,我已经把程序改为
#include <sys/types.h>
#include <sys/wait.h>
int main()
{
pid_t pid=fork();
if(pid==0)
{
//exit(5);
int x=3/0;
}
else if(pid>0)
{
int status;
int option=WUNTRACED;
waitpid(pid,&status,option);
if(WIFEXITED(status))
printf("return(exit) code is %d\n",WEXITSTATUS(status));

if(WIFSIGNALED(status))
printf("term signal's ID is %d\n",WTERMSIG(status));

if(WIFSTOPPED)//you must use WUNTRACED as a param in waitpid
printf("stop sigal's id is %d\n",WSTOPSIG(status));
}
}
程序运行结果return(exit) code is 8,
这里8应该是除0错误的终止代码吧,但是如果我想得到这个错误号码的一个描叙(因为通常我们不知道8到底代表什么),该怎么编程呢,谢谢,
回复

使用道具 举报

发表于 2005-5-5 11:40:32 | 显示全部楼层
void psignal(int signo,const char* msg);
回复

使用道具 举报

 楼主| 发表于 2005-5-5 14:03:11 | 显示全部楼层
谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 03:53 , Processed in 0.040355 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表