当前位置:  技术问答>linux和unix

关于system()函数问题!

    来源: 互联网  发布时间:2015-07-15

    本文导语:  system("your")函数调用之后会创建一个子进程,而父进程自己怎么被停止了呀?搞不懂,我希望不但能创建一个新的进程,而且原进程仍然处于活动状态,请问怎么办呀? | 父进程不是被停止了, 而是bl...

system("your")函数调用之后会创建一个子进程,而父进程自己怎么被停止了呀?搞不懂,我希望不但能创建一个新的进程,而且原进程仍然处于活动状态,请问怎么办呀?

|
父进程不是被停止了, 而是block并且不可被中断了。

       system()  executes  a command specified in string by calling /bin/sh -c string, and
       returns after the command has been completed.  During  execution  of  the  command,
       SIGCHLD will be blocked, and SIGINT and SIGQUIT will be ignored.

BUGS
       It is extremely unfortunate that the libc version of system()  ignores  interrupts.
       This  makes programs that call it from a loop uninterruptable.  This means that for
       such purposes one should not use system() but  a  private  version  like  (warning:
       untested code!)

       int my_system (const char *command) {
           int pid, status;

           if (command == 0)
               return 1;
           pid = fork();
           if (pid == -1)
               return -1;
           if (pid == 0) {
               char *argv[4];
               argv[0] = "sh";
               argv[1] = "-c";
               argv[2] = command;
               argv[3] = 0;
               execve("/bin/sh", argv, environ);
               exit(127);
           }
           do {
               if (waitpid(pid, &status, 0) == -1) {
                   if (errno != EINTR)
                       return -1;
               } else
                   return status;
           } while(1);
       }


|
system("your")  = 
1)先fork,再忽略SIGINT和SIGQUIT,以及阻塞SIGCHLD
2)后exec("/bin/sh -c your");
3)然后主进程:wait(..) // 等待2)结束。

如果想具体了解,可以看看apue(unix环境高级编程)英文版, page 314, 给了一个自己实现的system()函数。

|
不会吧,那就fork之后再system("your").

|
其实system就等同于sh
那你如果想执行命令的话,可以用exec函数来执行,可以保证进程还是原进程

|
牛人好多阿!!!

|
关注 :)

    
 
 

您可能感兴趣的文章:

  • POSIX.1要求system忽略SIGINT和SITQUIT,阻塞SIGCHLD,求解释。UNIX环境高级编程 system函数
  • system()函数返回什么值时,该函数执行成功?返回什么值时,执行出现错误?谢谢
  • linux c入门问题,大家指教。system函数和exec函数的区别。
  • 在线等,请问system函数返回值是什么值,怎么判断system运行是否成功?
  • 1。 新建目录的函数是那个? 2。Busybox对C的system函数支持没问题?
  • 关于linux下system函数编程
  • 急问:Linux程序中,使用system函数的几个问题
  • 关于system()函数的问题
  • system()函数用法
  • 调用system(“命令”)和函数调用之间有什么不同?效率?
  • 有关system函数打开网页的
  • system函数执行失败
  • linux system函数调用问题
  • system函数返回值是5,是表示什么意思?
  • 帮忙找找system函数的实现
  • Unix下System函数实现中为何要使用shell去调用执行程序?
  • linux平台下system函数的使用问题
  • 有关system()这个函数
  • 请问如何用system函数切换到root用户
  • linux下system 函数调用不成功,怎么回事?
  • 关于程序里面system不返回的问题
  • system() 返回值问题
  • 救命啊,一个system调用的问题
  • system("sudo reboot"),问题,希望帮助!
  • 关于多系统启动的问题(用System Commander),急!!!
  • 请解释一下一个很简单的问题:System.out.println(".......");……
  • php 使用system() 调用c程序的问题
  • system.err问题
  • system系统调用的问题
  • 请教unix下execvp和system函数的问题
  • 各位大哥借个地方,问一个macintosh system与VB的问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.sound.midi类shortmessage的类成员方法: system_reset定义及介绍
  • System.exit(0);和System.exit(1)有什么区别?
  • java命名空间javax.swing.text.html.parser接口dtdconstants的类成员方法: system定义及介绍
  • 请问System.out.print和System.out.printIn有什么不同?
  • java命名空间javax.sound.midi类sysexmessage的类成员方法: system_exclusive定义及介绍
  • 谁有 novell 3.12 的SYSTEM_1 和 SYSTEM_2 的软盘内容吗?[分不够可增加]
  • java命名空间javax.xml.transform类outputkeys成员方法: doctype_system定义参考
  • 请问java.lang.System是一个类吧??那么System.out.print()中的out充当什么角色呢?还是类???
  • java命名空间javax.swing类jfilechooser的类成员方法: file_system_view_changed_property定义及介绍
  • 现在用 System.exit(0) or System.exit(1) 来退出弹出窗口,但是连父窗口一起关闭(紧急求解)
  • java命名空间java.lang.management类managementfactory的类成员方法: operating_system_mxbean_name定义及介绍
  • System.out.println() 和System.err.println()有什么区别?THANKS
  • java命名空间java.lang类system的类成员方法: in定义及介绍
  • 深入解析System.load 与 System.loadLibrary
  • java命名空间javax.print.attribute.standard类jobstatereason的类成员方法: aborted_by_system定义及介绍
  • catch异常的时候用System.out.print()和用System.err.print()来输出有什么区别啊?
  • java命名空间java.lang类system的类成员方法: gc定义及介绍
  • system(command) 与 command 的区别
  • java命名空间java.lang类system的类成员方法: console定义及介绍
  • 请问,system.map有用吗?
  • java命名空间java.lang类system的类成员方法: runfinalization定义及介绍
  • 高分请问:用了System.setOut()后怎样才能恢复到默认输出状态?


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3