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

直接在终端启动程序和通过脚本或者exec函数执行有何不同?

    来源: 互联网  发布时间:2017-03-13

    本文导语:  各位大神,我碰到一个问题困扰了我一整天。就是我现在要把一个进程的输出重定向到一个文件中。我写了一个小程序,在程序中fork出一个子进程,在子进程里把输出重定向,然后用exec去执行它。 如果我在终端里敲...

各位大神,我碰到一个问题困扰了我一整天。就是我现在要把一个进程的输出重定向到一个文件中。我写了一个小程序,在程序中fork出一个子进程,在子进程里把输出重定向,然后用exec去执行它。
如果我在终端里敲入命令直接执行这个小程序,输出确实会重定向到我指向的文件中。问题是,如果我把这个小程序放到脚本里去执行(脚本里的命令和我在终端敲入的一样)或者是后台执行这个小程序,会导致cpu 100%,那个重定向的文件瞬间就被写的很大了。原因是那个进程会不断的输出同一个字符串到文件里。这里说明一下,这个进程启动后有点类似shell,打印一个提示符,然户等待用户输入命令,打印出执行结果,然后重新打印提示符,如此循环...,上面说的那个不断写入的字符串就是这个提示符。昨天花了一整天时间,也没搞定,只好上来求助了。大家帮我分析分析,是什么原因?为什么从终端里敲入命令和shell执行或者后台执行结果会不一样?

|
看你的描述,你只是在你的小程序里面把子进程的输出1重定向了,而输入0没有
这种情况下,终端里直接敲小程序的命令应该没问题,,因为你的小程序和和子进程都处理前台
在脚本里,从终端敲脚本命令应该也没问题

如果在后台运行的时候,,该程序会读输入0,但是此时后台的情况下是读会出错。(我知道是会产生信号SIGTTYIN使程序stopped,他应该是将其IGNORE了)  。  而如果程序忽略此错误的话,,那么比如里面用的是select东西那每次都会成功,,但又读不到东西,所以一直输出提示符。

你应该在你的小程序里面生成一个pipe,fd[0],fd[1],,,fd[0]重定向给子进程,fd[1]不管,,,,子进程的输出还是重定向到文件,,试试。。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个终端向另一终端发送命令,并在另一个终端上执行
  • shell 编程 执行shell新建多个终端 并执行程序
  • 在一个终端运行一个执行时间很长的程序中如何让这个程序切换到后台执行?
  • 关于在QT环境下加载gif图片的问题(可以显示,但是只有使用终端启动可执行文件才能显示,双击执行却不显示)这是为什么?
  • 使用终端远程执行程序的问题!
  • ubuntu终端less命令执行完之后怎样退出?
  • 我在UNIX下用PRO*C写了个程序,每次执行都得一个多小时,我想把它放到后台执行,也就是我想交给服务器执行,而我想产掉终端窗口,应该怎么做呢
  • SecureCRT 上执行的 python 程序如何能在关闭终端时继续执行?
  • 升级Linux内核在终端下输入make moveold执行失败问题?
  • 执行rpm -e fcitx终端无反应呀,怎么办?
  • 在redhat9.0的终端上,执行用gcc编译的c++程序,没有任何输出,这是怎么回事?
  • Redhat 的 fedora版本是刚刚安装好的,就发现了问题:终端里执行很多命令时提示:bash: xxx 权限不够
  • 启动Linux终端时不能自动执行.bash_profile文件
  • 请问终端回显消息是否会对程序正确执行造成影响?
  • 用户在终端一旦输入某命令,立刻执行一系列操作
  • Fedora9下在终端执行Qt程序
  • 新手相问一个比较偏僻的问题。 怎么在终端里执行一串命令行, 不是单独命令。跟shell有关。
  • 像终端一样方便,比IDE更强大──让VIM执行外部Shell
  • secureCRT下Linux终端汉字乱码解决方法
  • 终端 伪终端 控制终端有什么区别
  • 如何在windows下的DOS窗口中显示utf-8字符(CMD命令提示符终端显示utf-8字符)
  • 控制终端与终端设备是什么关系?
  • CentOS安装Telnet,以root用户登陆Telnet以及CentOS的各种终端解释
  • 如何得到一个终端的终端号/标示?
  • 终端、终端设备、控制台到底有什么区别和联系?(在线等,急!)
  • suse linux telnet连接到第30个终端后,无法打开新的终端
  • linux终端程序时如何隐藏终端
  • 如何关闭串口终端,切换终端?
  • linux终端或仿真终端如何打印图形??
  • 在内核中怎么操作伪终端,比如想在内核打印信息到telnet的终端
  • fedora 8 字符终端和图形终端互换


  • 站内导航:


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

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

    浙ICP备11055608号-3