Linux 在进程中启动另一个程序执行,并捕捉程序的运行结果的方法是什么?

来自:    更新日期:早些时候
怎么在linux中调用命令行中的命令,比如我想在一个程序中用命令行运行另一个程序~

Linux编程中在命令行启动另一个可执行文件或调用命令用system函数最简单了,这个函数原理是在你编写的那个程序的内部启动另一个程序或命令,从而创建一个新进程,并等待这个进程执行完毕退出。如果正常执行,system函数将返回被执行程序或命令的退出码;如果无法运行这个程序或命令,将返回错误代码127;如果是其他错误,返回-1。这个函数的原型是:
#include
int system(const char *string);
参数string是将要执行的程序文件名或路径,如果是启动一个命令就是一个命令字符串。
还有一种执行外部程序的方法是exec系列函数,一般是在fork的子进程里面调用exec系列函数,那主进程里直接调用exec系列不行吗,为什么要fork再在子进程里调用呢?因为exec系列的函数(包括execl函数)都是将当前进程替换成新进程,也就是说新进程启动后原来的进程就不存在了,exec系列函数后面的那些代码就不会再执行了。如果你不放在fork子进程里面,那主进程在执行execl函数后就完全不存在了,所以exec系列函数的使用都是先fork然后在子进程里面调用。因为exec系列函数都要使用fork调用,所以我一般是用system函数。

你不是 fork 出了两个子进程吗.
进程的执行顺序没有办法确定.
出现这种结果非常正常啊.

用fork启动子进程(另外一个程序)。
主进程处理SIG_CHLD信号,用waitpid回收。

使用system函数调用另外一个程序,可以返回结果。系统会自动fork一个子进程,然后exec执行另外的程序,

用nohup命令启动让程序后台执行!!

trace

你百度 csdn 注册一个 会员
这个是中国 程序员 喜欢的网站 啥的
然后搜索 你想要的程序 你就可以下载 可能需要一点的 分数 可是 你要是注册了就行 反正免费的
然后不会的 到上面问 那上面的 版主 几十年的技术

这种处理方法要用到 listen 和 socket 而且 waitpid 并不返回子线程在控制台上的输出结果。 有没有能处理 execle 起来的程序返回结果的?是不是要用到重定向? 除了nohup 就没有其他解决方法了吗?
不,这同listen和socket没一点关系。这个方法本身也同重定向也没关系!
nohup那是挂后台!也没关系! 这是最常见的打开子进程的方法。只是nohup和socket编程用到这个方法。

fork之后,子进程内execl:
pid = fork();
if(pid == 0) { /* 子进程 */
execl....
}else{
/* 父进程 */
...

}

同学,waitpid返回的是状态,不是标准输入输出!标准输入和输出需要你自己处理!默认父子进程共享stdin和stdout.

你想要什么结果?

如果只想要程序执行的结果, 用popen.

或者用pipe, 在父进程控制pipe的读端,子进程控制pipe的写端,如果不能改动要execl的代码,在子进程把STDOUT_FILENO(2)重定向(调用dup2)到pipe的写端。 当然,如果要访问STDIN_FILENO, 同样处理。


Linux 在进程中启动另一个程序执行,并捕捉程序的运行结果的方法是什么?视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网