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