Linux启动新进程的三种方法

2019-09-23 09:09:40于丽

waitpid函数使用示例如下:

process_fork2.c

#include<wait.h>
#include<stdio.h>
#include<sys/types.h>
int main()
{
  pid_t pid = fork();
  int stat = 0;
  switch(pid)
  {
    case -1:
      perror("fork failed");
      exit(1);
      break;
    case 0:
      printf("n");
      execlp("ps","ps","au",0);
      break;
    default:
      do
      {
        pid = waitpid(pid,&stat,WNOHANG);
        if(pid==0)
        {
          printf("parent do something else.n");
          sleep(1);
        }
      }while(pid==0);
      printf("Child has finished:PID=%dn",pid);
      printf("parent,ps donen");
      break;
  }
  exit(0);
}

输出结果:

4.启动新进程三种方法的比较

1)system函数最简单,启动shell进程,并在shell进程中执行新的进程。

效率不高,system函数必须等待子进程返回才能接着执行。

2)exec系列函数用新进程替换掉原进程,但不会返回到原进程,除非调用失败。

该函数继承了许多原进程的特性,效率也较高。

3)fork函数,复制一个子进程,和父进程一模一样,但是拥有自己的内存空间。父子进程执行互不影响。需要注意僵尸子进程的问题。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持易采站长站!