8.13 进程控制_system函数

  • #include<stdlib.h>
  • int system(const char *cmdstring);

      如果cmdstring是一个空指针,则仅当命令处理程序可用时,system返回非0值。

      因为system在其实现中调用了fork、exec和waitpid,因此有三种返回值:

  • 如果fork失败或者waitpid返回除EINTR之外的出错,则system返回-1,而且errno中设置了错误类型值。
  • 如果exec失败(表示不能执行shell),则返回值如同shell执行了exit(127)一样。
  • 否则所有三个函数(fork、exec和waitpid)都执行成功,并且system的返回值是shell的终止状态,其格式已在waitpid中说明。

      使用system而不是直接使用fork和exec的优点是:system进行了所需的各种出错处理,以及各种信号处理。

      如果调用system的进程在调用它之前已经生成它自己的子进程,那么将引起问题。

      如果在一个设置用户ID程序中调用system,这是一个完全性方面的漏洞,决不应当这样做。如果一个进程正以特殊的权限(设置用户ID或设置组ID)运行,它又想生成另一个进程执行另一个程序,则它应当直接使用fork和exec,而且在fork之后、exec之前要改回到普通权限。设置用户ID或设置组ID程序决不应调用system函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值