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

linux 调用进程

    来源: 互联网  发布时间:2016-04-30

    本文导语:  大家好! 请教一个问题:有两个进程(A&B),进程A中通过excel()函数调用进程B。请问进程A如何获取进程B的返回结果? 谢谢! | There is no return from a successful call to an exec() function, becaus...

大家好!
请教一个问题:有两个进程(A&B),进程A中通过excel()函数调用进程B。请问进程A如何获取进程B的返回结果?
谢谢!

|
There is no return from a successful call to an exec() function, because the calling process is functionally replaced by the new process. You can never return to the to original code unless the call to execl fails.

calling process (A) 都被 B 取代了,B 的结果不可能返回给 A

lz 应该考虑 A 经过 fork 生成 C,C 再执行 execl,生成 B

A 可以得到 B 的返回


wait(&status);
if (WIFEXITED(status)) {
    printf("exited, status=%dn", WEXITSTATUS(status));
}

 

|
   exec系列调用完毕后,原来的进程的地址空间就被exec的参数所代表的进程的地址空间取代了,本质上它们还是一个进程,比如进程号pid就没有变,task_struct的大部分字段都没有变,只是mm_struct和file相关的还有io权限等相关的变化了,可以说exec后原来进程的地址空间mm_struct的引用计数被减1,如果原来的进程就一个线程,那么该地址空间就被释放了,即便多线程情况下的mm_struct不被释放,那它也不属于你这个线程乐,所以你根本无法在执行完exec后再回到原来的进程(参考内核源码sys_execve吧)。
   倘若想得到exec的结果,办法是:
1.fork()-->在子进程exec
2.直接用system函数,它本质上就是先fork再exec,只是封装了一下下

|
希望以下两点说明能解决你的问题。

1、waitpid函数的原型
#include 
pid_t waitpid(pid_t pid, int * statloc, int option);
先不考虑最后一个参数,第一个参数是需要等待的进程id,第二个参数是需要等待进程的返回状态,即如果通过waitpid获取到第一个参数定义的进程的返回状态,那么该返回状态存入statloc。需要注意的是,返回状态包括很多信息,其中之一就是返回值。

2、检查wait和waitpid返回状态的宏
WIFEXITED(statloc) 这个判断是不是正常返回,若正常返回其值为真
WEXITSTATUS(statloc) 如果正常返回,取statloc返回状态中的返回值。


|
先fork子进程exec,父进程waitpid

    
 
 

您可能感兴趣的文章:

  • Linux添加系统调用时如何调用C语言库函数
  • linux中为什么系统调用比普通函数调用更费时间?
  • 为什么我的BEAN 在WIN2000中调用没有问题,但在LINUX中调用有问题
  • 如何在LINUX下用一个普通文件调用一个自己编写的调用系统的文件
  • LINUX下系统调用是不能中断的,要怎么改造成可以中断系统调用?
  • 请问linux中的系统调用号是如何跟系统调用表对应起来的
  • 新手:Linux下使用第三方C库(openssl),是调用.so文件还是直接调用.h文件?
  • linux系统调用问题
  • 我如何调用 内核函数 /linux/fs 里面的内核 函数:比如 自己的程序调用 ext3_delete_inode
  • 关于Linux系统调用的问题!
  • 请教在linux中如何动态的增加一个系统调用(模块中)
  • Linux环境下,如何一个驱动中调用另外一个驱动
  • linux:怎么在驱动中调用IIC驱动?
  • linux下在Qt中调用flash播放器
  • 如何达到我这种linux下的系统调用效果
  • window下能否调用linux的静态库(a文件)?
  • Qt下使用Linux系统调用?
  • linux3.0.0.12内核怎么添加系统调用
  • C库函数和linux系统调用区别
  • 请问各位linux开发大虾,linux下有类似VC中depends的工具可以查看文件调用了哪些so文件吗?
  • linux僵尸(zombie)进程介绍及清除
  • linux下system函数调用shell命令后,怎样让主进程不等子进程返回,接着执行(在线)? iis7站长之家
  • linux下进程占用内存空间详解
  • linux命令如何实现重启父进程而不会使其子进程退出
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • Linux中最多同时可以开多少个进程,一个进程可以开多少个线程?
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • Linux守护进程 的子进程 终端处理
  • Linux内核进程与应用进程的通信方式有哪些?
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • linux下system函数调用shell命令后,怎样让主进程不等子进程返回,接着执行(在线)?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • Linux下chmod命令详细介绍及用法举例
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


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

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

    浙ICP备11055608号-3