linux下C编程笔记

1、system()函数

相关函数:fork,execve,waipid,popen

表头文件:#include<stdlib.h>

函数定义:int system(const char *string)

返回值:
如果fork()失败 返回-1:出现错误
如果exec()失败,表示不能执行Shell,返回值相当于Shell执行了exit(127)
如果执行成功则返回子Shell的终止状态
如果system()在调用/bin/sh时失败则返回127,其他失败原因返回-1。若参数string为空指针(NULL),则返回非零值>;。如果system()调用成功则最后会返回执行shell命令后的返回值,但是此返回值也有可能为 system()调用/bin/sh失败所返回的127,因此最好能再检查errno 来确认执行成功

 

system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串锁代表的命令,此命令执行后随即返回原调用的进程,在调用system()期间,SIGCHILD信号会被暂时搁置,SIGINT和SIGQUIT信号会被忽略。

 

system与exec的区别:

(1)system与exec都可执行进程外的命令,但是system是在原进程上新开辟一个进程,而exec是用新进程(命令)覆盖了原来的进程。

(2)二者都会产生返回值,system的返回值不影响原进程,exec的返回值影响原进程。

2、进程控制wait3和wait4

wait3和wait4提供的功能比wait、waitpid和waitid所提供的功能要多一个,这与附加参数rusage有关。该参数要求内核返回由终止进程及其所有子进程使用的资源汇总。

  • #include <sys/types.h>
  • #include <sys/wait.h>
  • #include <sys/time.h>
  • #include <sys/resource.h>
  • pid_t wait3(int *statloc, int options, struct rusage *rusage);
  • pid_t wait4(pid_t pid, int *statloc, int options, struct rusage *rusage);

两个函数返回值:若成功返回进程ID,若出错则返回-1

      资源统计信息包括用户CPU时间总量、系统CPU时间总量、页面出错次数、接收到信号的次数等。有关细节参阅getrusage(2)手册页。

 3、WTERMSIG宏测试

WTERMSIG:测试作用通过信号来决定那个子线程被退出。
命令格式:

#include <sys/wait.h>
int WTERMSIG(int status);

调用情况:

wait()和 waitpid()函数结合使用。

返回值:

WTERMSIG宏测试被执行后,若成功返回被终止的子进程的信号值。返回的信号值被定义在 sys/signals.h头文件中。

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值