当前位置:  技术问答>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()的?
谢谢

|
你想不阻塞,手动回收子进程的时候 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())

    
 
 

您可能感兴趣的文章:

  • 类的构造函数,什么时候执行,是在new 新类的时候吗?
  • 我在执行javac命令的时候没有问题,但是在执行java命令的时候却报如下错误
  • 在C程序里面执行unix的命令的时候怎么获取执行的结果了?
  • 编译qt-x11,最后编译生成可执行文件时候,make出错
  • LINUX中执行一个程序的时候出现的错
  • 为什么执行文件的时候一定要加上“./”
  • for循环最大支持多大的循环次数?这什么我执行10000次的时候发生了错误?
  • 编译执行spserver时候遇到的错误,帮忙看看
  • Linux下如何让系统启动的时候自动执行脚本?
  • redhat9如何配置,实现在用户登陆的时候自动执行指定程序。
  • QT4编程 编译执行的时候一闪而过
  • 如果在linux中执行脚本的时候出现死循环了应该怎么退出
  • 在执行 rs.previous(); 的时候,出现的错误
  • 什么时候才把class打包成mainfest!!!(急),并直接执行
  • 请问怎样在servlet启动的时候执行一些自己的初始化工作
  • 我成功编译了一个C程序,可是我执行的时候它却说找不到....
  • 如何让LINUX在启动的时候执行一个程序或命令?
  • 在程序头加上package为什么在java执行的时候报错
  • gcc编译链接的时候出错,不能生成可执行文件。
  • 当用JDBC链接上数据库以后,执行SQL的时候...................
  • redhat7.1下可执行文件不能执行????
  • cd、zip等命令在shell提示符下能执行,在shell脚本中为什么不能执行呢?
  • 奇怪的问题?以root用户执行二进制文件被告知不能执行
  • 灵异事件啊!重新编译后不能执行。换了下类名却能执行
  • 100分:red hat 9怎么不能执行可执行文件?
  • 简单问题,关于chkconfig等命令不能执行。
  • 为何不能执行两个exe文件?
  • linux 下子线程不能执行的问题?
  • 普通用户nms下的crontab不能执行
  • CGI不能执行
  • 在linux下用CC编译的程序不能执行
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 怎么在一个程序的执行过程中中止执行它?比如一个按钮的响应程序中,执行一半中止??20分!!!
  • linux下通过crond实现自动执行程序
  • 我用GCC生成的可执行文件无法直接在shell命令行下执行,这是为什么?可以用调试器调入执行。我用Red Hat7.0
  • linux下nm命令(显示可执行文件的符号信息)介绍以及常见nm命令用法举例
  • 如何实现一个线程组内多线程的非同不执行,即一个线程执行完毕后再执行下一个线程???
  • Microsoft IE MSHTML内存破坏远程代码执行漏洞
  • 请问:我发现如果在/usr/local/bin 与/usr/bin下都有同一个执行文件时,当在shell下执行时,只会执行/usr/local/bin,下的,怎么改过来?
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • SUSE10下,如何使用perl语言执行一条语句:从一台机器telnet到远端另一台机器,在远端机器上执行命令,并能获取到执行结果。请高手指点,Very 谢谢~
  • linux下不使用sudo命令执行docker的操作步骤
  • 我在UNIX下用PRO*C写了个程序,每次执行都得一个多小时,我想把它放到后台执行,也就是我想交给服务器执行,而我想产掉终端窗口,应该怎么做呢
  • Mysql Select查询执行流程介绍及实例
  • 怎样执行可执行文件?
  • C中用system系统调用执行command,执行过程中死锁,如何处理?
  • 在B shell里怎麽执行曾经执行过的命令
  • 请问JSP中的<jsp:forward page=""/>执行后,后边的操作还会执行吗?
  • 执行当前目录下可执行程序时前面必须要加上./才可以,如何解决?
  • 如何在LINUX中在系统启动后自动执行一个执行一个程序?
  • linux在脚本执行命令和直接在命令行执行命令有什么区别
  • shell 脚本 date 手动执行 和 放在init.d中自动执行的时间不一样


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,