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

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

猜你喜欢

转载自blog.csdn.net/yu876876/article/details/80319075
今日推荐