waitpid

waitpid(等待子进程中断或结束)
  表头文件
  #include<sys/types.h>
  #include<sys/wait.h>
  定义函数 pid_t waitpid(pid_t pid,int * status,int options);
  函数说明
  waitpid()会暂时停止目前进程的执行,直到有信号来到或子进程
  结束。如果在调用 wait()时子进程已经结束,则 wait()会立即
  返回子进程结束状态值。 子进程的结束状态值会由参数 status 返回,
  而子进程的进程识别码也会一起返回。如果不在意结束状态值,则
  参数 status 可以设成 NULL。参数 pid 为欲等待的子进程识别码,
  其他数值意义如下:
  pid<-1 等待进程组识别码为 pid 绝对值的任何子进程。
  pid=-1 等待任何子进程,相当于 wait()。
  pid=0 等待进程组识别码与目前进程相同的任何子进程。
  pid>0 等待任何子进程识别码为 pid 的子进程。
  参数 option 可以为 0 或下面的 OR 组合:
  WNOHANG 如果没有任何已经结束的子进程则马上返回, 不予以等待。
  WUNTRACED 如果子进程进入暂停执行情况则马上返回,但结束状态不予以理会。
  子进程的结束状态返回后存于 status,底下有几个宏可判别结束情况:
  WIFEXITED(status)如果子进程正常结束则为非 0 值。
  WEXITSTATUS(status)取得子进程 exit()返回的结束代码,一般会先用 WIFEXITED 来判断是否正常结束才能使用此宏。
  WIFSIGNALED(status)如果子进程是因为信号而结束则此宏值为真
  WTERMSIG(status) 取得子进程因信号而中止的信号代码,一般会先用 WIFSIGNALED 来判断后才使用此宏。
  WIFSTOPPED(status) 如果子进程处于暂停执行情况则此宏值为真。一般只有使用 WUNTRACED 时才会有此情况。
  WSTOPSIG(status) 取得引发子进程暂停的信号代码,一般会先用 WIFSTOPPED 来判断后才使用此宏。
  如果执行成功则返回子进程识别码(PID) ,如果有错误发生则返回
  返回值-1。失败原因存于 errno 中。
  /******
  * waitpid.c - Simple wait usage
  *********/
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/wait.h>
  #include <stdio.h>
  #include <stdlib.h>
  int main( void )
  {
  pid_t childpid;
  int status;
  childpid = fork();
  if ( -1 == childpid )
  {
  perror( "fork()" );
  exit( EXIT_FAILURE );
  }
  else if ( 0 == childpid )
  {
  puts( "In child process" );
  sleep( 3 );//让子进程睡眠3秒,看看父进程的行为
  printf("\tchild pid = %d\n", getpid());
  printf("\tchild ppid = %d\n", getppid());
  exit(EXIT_SUCCESS);
  }
  else
  {
  waitpid( childpid, &status, 0 );
  puts( "in parent" );
  printf( "\tparent pid = %d\n", getpid() );
  printf( "\tparent ppid = %d\n", getppid() );
  printf( "\tchild process exited with status %d \n", status );
  }
  exit(EXIT_SUCCESS);
  }
  [root@localhost src]# gcc waitpid.c
  [root@localhost src]# ./a.out
  In child process
  child pid = 4469
  child ppid = 4468
  in parent
  parent pid = 4468
  parent ppid = 4379
  child process exited with status 0
  [root@localhost src]#
  如果将上面“waitpid( childpid, &status, 0 );”行注释掉,程序执行效果如下:
  [root@localhost src]# ./a.out
  In child process
  in parent
  parent pid = 4481
  parent ppid = 4379
  child process exited with status 1331234400
  [root@localhost src]# child pid = 4482
  child ppid = 1
  子进程还没有退出,父进程已经退出了。

fork

fork()函数,Linux系统调用
  头文件:
  #include <unistd.h>
  函数定义:
  int fork( void );
  返回值:
  子进程中返回0,父进程中返回子进程ID,出错返回-1
  函数说明:
  一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。
  子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间,它们之间共享的存储空间只有代码段。
  示例代码:
  #include <unistd.h>
  #include <stdio.h>
  int main(int argc, void ** argv )
  {
  int pid = fork();
  if(pid < 0 ) {
  // print("error!");
  } else if( pid == 0 ) {
  // print("This is the child process!");
  } else {
  // print("This is the parent process! child process id = %d", pid);
  }
  return 0;
  }

execlp

execlp(从PATH 环境变量中查找文件并执行)
  相关函数:
  fork,execl,execle,execv,execve,execvp
  表头文件:
  #include<unistd.h>
  定义函数:
  int execlp(const char * file,const char * arg,……);
  函数说明:
  execlp()会从PATH 环境变量所指的目录中查找符合参数file的文件名,找到后便执行该文件,然后将第二个以后的参数当做该文件的argv[0]、argv[1]……,最后一个参数必须用空指针(NULL)作结束。
  返回值:
  如果执行成功则函数不会返回,执行失败则直接返回-1,失败原因存于errno 中。
  错误代码 参考execve()。
  范例:
  /* 执行ls -al /etc/passwd execlp()会依PATH 变量中的/bin找到/bin/ls */
  #include<unistd.h>
  main()
  {
  execlp(“ls”,”ls”,”-al”,”/etc/passwd”,(char *)0);
  }
  执行:
  -rw-r--r-- 1 root root 705 Sep 3 13 :52 /etc/passwd
  ————————————————————————————————add by love_aiqiu
  NAME
  execl, execlp, execle, execv, execvp - execute a file
  SYNOPSIS
  #include <unistd.h>
  extern char **environ;
  int execl(const char *path, const char *arg, ...);
  int execlp(const char *file, const char *arg, ...);
  int execle(const char *path, const char *arg , ..., char * const envp[]);
  int execv(const char *path, char *const argv[]);
  int execvp(const char *file, char *const argv[]);

Linux环境编程--waitpid与fork与execlp相关推荐

  1. java fork子进程_Linux环境编程–waitpid与fork与execlp

    waitpid waitpid(等待子进程中断或结束) 表头文件 #include #include 定义函数 pid_t waitpid(pid_t pid,int * status,int opt ...

  2. Linux 环境编程 用户层定时器使用二 timer_create的使用

    用户层定时器有两种,一种是timerfd,另一种是timer_create,前者比较新,使用比较方便. Linux环境编程 用户层定时器使用一 timerfd的使用 https://blog.csdn ...

  3. Linux环境编程05

    目录 Linux环境编程05 一.信号相关基本概念 二.信号捕获 三.进程休眠信号 四.信号集和信号阻塞 五.附带数据信息的信号处理(较难) 六.定时器 Linux环境编程05 声明:本学习笔记为个人 ...

  4. Linux环境编程姜林美,Linux环境编程习题_编程题_答案.pdf

    Linux环境编程习题_编程题_答案 Linux 境编程-人民邮电出版社-姜林美 课后习题(编程题)答案 第三章 1 第五章 4 第六章 9 第七章 19 第八章 22 第九章 35 第十章 38 三 ...

  5. Linux 环境编程 day01 Linux系统介绍、GNU编译工具、静态/共享库、环境变量表

    Linux 环境编程 day01 Linux系统介绍.GNU编译工具.静态/动态库.环境变量表 学习Linux环境编程的原因 UNIX系统介绍 Linux系统介绍 GNU工程 POSIX标准 GNU通 ...

  6. linux环境编程从应用,linux环境编程:从应用到内核

    <UNIX环境高级编程>(简称APUE)几乎是Linux领域程序员人手必备的一本书.但在掌握和理解APUE的内容后,又该如何继续提高自己的技能,如何更深入地理解Linux环境编程及其背后的 ...

  7. Linux环境编程多线程定时器、延时队列以及分布式定时器的现实与原理分析

    Linux环境编程多线程定时器.延时队列以及分布式定时器的现实与原理分析丨线程池丨中间件丨后端开发丨C/C++linux服务器开发 视频讲解如下,点击观看: Linux环境编程多线程定时器.延时队列以 ...

  8. 林世霖. linux环境编程图文指南,linux环境编程图文指南

    linux环境编程图文指南是一本linux编程环境配置指南,由林世霖.钟锦辉和李建辉三人共同编著.本书定位Linux环境编程入门与提高,全书拥有近400余幅案例图表,200多篇源代码,作者很多编程初入 ...

  9. Linux环境编程(4)文件操作相关内容补充

    Linux环境编程(4) 文件同步: 1.在写入数据时内存与磁盘之间也有一个缓冲区,这种机制降低了磁盘读写次数,提高了读写的效率. 2.但这种机制带来的后果就是磁盘中的数据与实写入的数据不匹配,系统提 ...

最新文章

  1. createinstance.java_C# Activator.CreateInstance()方法使用
  2. iOS Abort问题系统性解决方案
  3. bootstrap ace admin 整合java HTML5
  4. 基于openstack的自动化测试平台设计头脑风暴
  5. kafka内置分区及自定义分区
  6. Codeforces Round #503 (by SIS, Div. 2) C. Elections
  7. helperdialect mysql_Mybatis使用pageHelper步骤(动态分页)
  8. java jimi_绝对经典Java开源工具Jimi处理图片大小及格式转换及打水印(源码)
  9. 数学笔记10——拉格朗日中值定理
  10. ai人工智能将替代人类_人类与人工智能
  11. idea 关于自动导包的设置
  12. 【数据结构和算法】赫夫曼树 | 实战演练
  13. android 11.0 12.0USB连接模式默认设为MTP
  14. 好多粉数据上报之卧龙搜索ocpc API上报数据
  15. L1-079 天梯赛的善良 (20 分)
  16. 思科2018校园招聘硬件笔试试题 及其答案
  17. 关于浏览器极速模式怎么设置
  18. [计算机网络]-TCP-概述
  19. Tesseract-ocr识别中文并训练字库操作指南
  20. 常见命令之 head与tail

热门文章

  1. minitab怎么算西格玛水平_六西格玛黑带培训内容
  2. 点云Las文件是什么?
  3. 使用Python,dlib中新型、更快、更小的5点面部标志检测器检测人脸、眼睛、鼻子
  4. 正点原子:STM32F103(战舰)、STM32F407(探索者)、STM32F103(MINI)原理图和PCB
  5. matlab实现指数平滑(一次/二次/三次)
  6. adc 接收cube_官方的stm32cube软件教程实例ADC操作代码(官方自带的,可以无视
  7. 人类的思维方式有哪些?【达克效应】
  8. vue下轻松解决模拟微信视频缩略图拖拽→吸附窗口边界的功能
  9. 在Ubuntu 16.0.4.5 LTS上安装python 2.7版本的cv2模块
  10. Blender写实产品创作学习教程