当前位置: 技术问答>linux和unix
执行一个外部程序,什么时候必须用fork+execl而不能直接system()?
来源: 互联网 发布时间:2017-04-18
本文导语: system函数里面可以"PATH=.... /usr/local/bin/my..."这样去设置PATH或者别的环境变量。 那么有没有什么情形,执行一个外部命令,必须用fork+execl而不能直接system()的? 谢谢 | 你想不阻塞,手动回收子...
system函数里面可以"PATH=.... /usr/local/bin/my..."这样去设置PATH或者别的环境变量。
那么有没有什么情形,执行一个外部命令,必须用fork+execl而不能直接system()的?
谢谢
那么有没有什么情形,执行一个外部命令,必须用fork+execl而不能直接system()的?
谢谢
|
你想不阻塞,手动回收子进程的时候 waitpid
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
看下system的实现,调用system后 父进程会阻塞在 waitpid上
system()会调用fork()产生子进程,由子进程来调用/bin/sh-c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。在调用system()期间SIGCHLD 信号会被暂时搁置,SIGINT和SIGQUIT 信号则会被忽略。
看下system的实现,调用system后 父进程会阻塞在 waitpid上
int system(const char * cmdstring)
{
pid_t pid;
int status;
if(cmdstring == NULL)
{
return (1); //如果cmdstring为空,返回非零值,一般为1
}
if((pid = fork())