popen/system, 理解这两个函数和fork的区别.

本文对比了system与popen函数的执行流程、信号处理及功能差异,并强调了在特权进程中使用这些函数时需要注意的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

popen
system
fork
执行流程

  system:在执行期间调用进程会一直等待shell命令执行完成

  popen:无须等待shell命令执行完成就返回     (并行执行)
  popen后需要调用pclose防止子进程变成”僵尸”状态。 

  fork :执行期间父进程等待子进程的退出码

信号处理

         system:对SIGCHLD、SIGINT、SIGQUIT都做了处理,
         popen:  没有对信号做任何的处理。

    system()调用堆信号屏蔽的原因是因为system能够及时的退出
    并且能够正确的获取子进程的退出状态(成功回收子进程)。 

    popen()函数中没有屏蔽SIGINT、SIGQUIT的原因
    是因为popen是”并行的”,不能影响其它”并行”进程。

功能

    system:执行shell命令最后返回是否执行成功,
    popen:执行命令并且通过管道和shell命令进行通信。

注意

    在特权(setuid、setgid)进程中千万注意不要使用system和popen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值