system()与WIFEXITED/WEXITSTATUS/WIFSIGNALED

system()用于执行shell命令


头文件

        #i nclude<stdlib.h>

函数定义

        int system(const char *command) ;

函数说明

        system()会调用fork()产生子进程,由子进程来调用/bin/sh-c command来执行参数command字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用

system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。

返回值

=-1:出现错误 

=0:调用成功但是没有出现子进程 

>0:成功退出的子进程的id


子进程的结束状态返回后存于status,底下有几个宏可判别结束情况

WIFEXITED(status)如果子进程正常结束则为非0值。

WEXITSTATUS(status)取得子进程exit()返回的结束代码,一般会先用WIFEXITED 来判断是否正常结束才能使用此宏。

WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真

WTERMSIG(status)取得子进程因信号而中止的信号代码,一般会先用WIFSIGNALED 来判断后才使用此宏。

WIFSTOPPED(status)如果子进程处于暂停执行情况则此宏值为真。一般只有使用WUNTRACED 时才会有此情况。

WSTOPSIG(status)取得引发子进程暂停的信号代码


举个例子:

int status;

status= system("ls -l");

/*需检测system()返回值*/
if(WIFSIGNALED(status) && (WTERMSIG(status)==SIGINT || WTERMSIG(status)==SIGQUIT))
;

printf(" WIFEXITED is %d ", WIFEXITED(status));

printf("WEXITSTATUS is %d ",WEXITSTATUS(status)); //获取shell命令执行完成的返回值

printf("WIFSIGNALED is %d ",WIFSIGNALED(status));

printf("WTERMSIG is %d ",WTERMSIG(status));

printf("WIFSTOPPED is %d ",WIFSTOPPED(status));

printf("WSTOPSIG is %d ",WSTOPSIG(status));

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值