#include <stdio.h>;
#include <stdlib.h>;
#include <sys/wait.h>;
#include <sys/types.h>;
int main()
{
pid_t status ;
errno = 0 ;
status = system("cp hello.c hello.c.bak") ;
if (status == -1)
printf("system error!") ;
if (WIFEXITED(status)){
printf("cp exit normal![%d]\n", errno) ;
printf("exit staus = [%X]\n", WEXITSTATUS(status)) ;
}else
printf("cp exit illegal![%d]\n", errno) ;
}
[/code]
测试了一把.结果如下
如果hello.c存在,cp也成功将hello.c拷贝到了hello.c.bak则打印
cp exit normal![0]
exit status = [0]
如果hello.c不存在,则打印
cp exit normal![0]
exit status = [1]
我的问题是.
1.在何种情况下会打印cp exit illegal!
2.如果是exit normal,那么exit status的值是否和system调用执行的进程紧密相关(如本例中的cp)
3.如果上个问题的回答是肯定的,那我该如何得到关于cp的各种退出状态.cp的手册页里好象没有相关说明.
老调重弹--问system返回值
第二个问题我测试了一下,回答是肯定的.
exit status等于被调用程序的用exit(n)或者return n
给出的值.
第一个问题还是不知道.
我在被调用程序运行过程中将他kill掉.
程序还是打印exit normal!可是status取到的值明显是不对的.
faint
老调重弹--问system返回值
UP
老调重弹--问system返回值
WIFEXITED(status)
returns true if the child terminated normally, that is, by call-
ing exit() or _exit(), or by returning from main().
老调重弹--问system返回值
楼上的兄弟谢谢了.
我不明白的正是这个问题.
按照上面的描述,我把被调用的进程kill掉.按照我的理解
WIFEXITED(status)不应该返回真才对.
老调重弹--问system返回值
没有人知道吗?
老调重弹--问system返回值
man里面说-->
不管你有没有hello.c文件。你的system都会正常结束,也就都不会返回-1,区别只是cp动作的结束状态不同。
老调重弹--问system返回值
-->
是的,这个我知道,
我现在想知道的是什么情况下
WIFEXITED(status)不会返回真.
我不明白为什么我把被调用的进程中间KILL掉这个宏的值还是真.
但是WEXITSTATUS(status)的值明显不是被调用进程的返回值.
老调重弹--问system返回值
你怎么kill掉的呢?cp之间你kill它?^_^,我也不太明白。
老调重弹--问system返回值
[code]
#include <stdio.h>;
#include <stdlib.h>;
#include <sys/wait.h>;
#include <sys/types.h>;
int main()
{
pid_t status ;
errno = 0 ;
status = system("./hi") ;
if (status == -1)
printf("system error!") ;
if (WIFEXITED(status)){
printf("process exit normal![%d]\n", errno) ;
printf("exit staus = [%X]\n", WEXITSTATUS(status)) ;
}else
printf("process exit illegal![%d]\n", errno) ;
}
[/code]
[code]
int main()
{
printf("HI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n") ;
sleep(20) ;
return 4 ;
}
[/code]
这样就可以做到在运行中把进程"hi"kill掉了.
如过是正常退出WEXITSTATUS(status)的值是4
如果是KILL掉
WIFEXITED(status)J还是真,但是WEXITSTATUS(status)的值却是86
这个86真让人faint.
#include <stdlib.h>;
#include <sys/wait.h>;
#include <sys/types.h>;
int main()
{
pid_t status ;
errno = 0 ;
status = system("cp hello.c hello.c.bak") ;
if (status == -1)
printf("system error!") ;
if (WIFEXITED(status)){
printf("cp exit normal![%d]\n", errno) ;
printf("exit staus = [%X]\n", WEXITSTATUS(status)) ;
}else
printf("cp exit illegal![%d]\n", errno) ;
}
[/code]
测试了一把.结果如下
如果hello.c存在,cp也成功将hello.c拷贝到了hello.c.bak则打印
cp exit normal![0]
exit status = [0]
如果hello.c不存在,则打印
cp exit normal![0]
exit status = [1]
我的问题是.
1.在何种情况下会打印cp exit illegal!
2.如果是exit normal,那么exit status的值是否和system调用执行的进程紧密相关(如本例中的cp)
3.如果上个问题的回答是肯定的,那我该如何得到关于cp的各种退出状态.cp的手册页里好象没有相关说明.
老调重弹--问system返回值
第二个问题我测试了一下,回答是肯定的.
exit status等于被调用程序的用exit(n)或者return n
给出的值.
第一个问题还是不知道.
我在被调用程序运行过程中将他kill掉.
程序还是打印exit normal!可是status取到的值明显是不对的.
faint
老调重弹--问system返回值
UP
老调重弹--问system返回值
WIFEXITED(status)
returns true if the child terminated normally, that is, by call-
ing exit() or _exit(), or by returning from main().
老调重弹--问system返回值
楼上的兄弟谢谢了.
我不明白的正是这个问题.
按照上面的描述,我把被调用的进程kill掉.按照我的理解
WIFEXITED(status)不应该返回真才对.
老调重弹--问system返回值
没有人知道吗?
老调重弹--问system返回值
man里面说-->
不管你有没有hello.c文件。你的system都会正常结束,也就都不会返回-1,区别只是cp动作的结束状态不同。
老调重弹--问system返回值
-->
是的,这个我知道,
我现在想知道的是什么情况下
WIFEXITED(status)不会返回真.
我不明白为什么我把被调用的进程中间KILL掉这个宏的值还是真.
但是WEXITSTATUS(status)的值明显不是被调用进程的返回值.
老调重弹--问system返回值
你怎么kill掉的呢?cp之间你kill它?^_^,我也不太明白。
老调重弹--问system返回值
[code]
#include <stdio.h>;
#include <stdlib.h>;
#include <sys/wait.h>;
#include <sys/types.h>;
int main()
{
pid_t status ;
errno = 0 ;
status = system("./hi") ;
if (status == -1)
printf("system error!") ;
if (WIFEXITED(status)){
printf("process exit normal![%d]\n", errno) ;
printf("exit staus = [%X]\n", WEXITSTATUS(status)) ;
}else
printf("process exit illegal![%d]\n", errno) ;
}
[/code]
[code]
int main()
{
printf("HI!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n") ;
sleep(20) ;
return 4 ;
}
[/code]
这样就可以做到在运行中把进程"hi"kill掉了.
如过是正常退出WEXITSTATUS(status)的值是4
如果是KILL掉
WIFEXITED(status)J还是真,但是WEXITSTATUS(status)的值却是86
这个86真让人faint.
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/980/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
评论列表