欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c/c++ linux 进程 fork wait函数

程序员文章站 2022-03-10 15:07:25
linux 进程 fork wait函数 fork:创建子进程 wait:父进程等待子进程结束,并销毁子进程,如果父进程不调用wait函数,子进程就会一直留在linux内核中,变成了僵尸进程。 fork函数的详细说明: "fork" wait函数详细说明参考: "wait" 例子1:不注释掉exit ......

linux 进程 fork wait函数

fork:创建子进程

wait:父进程等待子进程结束,并销毁子进程,如果父进程不调用wait函数,子进程就会一直留在linux内核中,变成了僵尸进程。

fork函数的详细说明:

wait函数详细说明参考:

例子1:不注释掉exit(0)的话,子进程不会执行到printf("end pid: %d\n", getpid());这行。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <wait.h>//wait function

int main(){
  pid_t pid;

  pid = fork();

  if(pid == 0){
    printf("child process : %d\n", getpid());
    //exit(0);
  }
  else{
    int status;
    pid_t waitpid;

    printf("parent process : childpid=%d , mypid=%d\n",pid, getpid());
    waitpid = wait(&status);
    printf("waitpid:%d\n", waitpid);
  }
  printf("end pid: %d\n", getpid());
  return 0;
}

例子2:父进程和子进程之间,值是不共有的,你是你的,我是我的。

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(){
  pid_t pid;
  int i = 100;

  pid = fork();

  if(pid == 0){
    printf("child process : %d\n", getpid());
    i += 500;
  }
  else{
    printf("parent process : childpid=%d , mypid=%d\n",pid, getpid());
    i += 1024;
  }
  printf("i=%d\n", i);

  return 0;
}

例子3:线程之间,值是共有的。

#include <stdio.h>
#include <unistd.h>//sleep function
#include <pthread.h>

int global_val = 0;

void* sub_thread(void *data){
  int* val = (int*)data;

  printf("sub_thread : val=%d\n", *val);

  for(int i = 0; i < 10; ++i){
    global_val++;
    printf("sub_thread : i=%d, g=%d\n", i, global_val);
    sleep(1);
  }
  return null;
}

int main(){
  pthread_t th;
  void* th_ret;
  int arg = 200;
  
  if(pthread_create(&th, null, sub_thread, (void*)&arg) != 0){
    perror("pthread_create");
    return 1;
  }

  for(int i = 0; i < 10; ++i){
    global_val++;
    printf("main: i=%d, g=%d\n", i, global_val);
    sleep(1);
  }

  if(pthread_join(th, &th_ret) != 0){
    perror("pthread_join");
    return 1;
  }

  return 0;
}

编译时需要加 -pthread

g++ -g process-5-thread.cpp -std=c++11 -pthread

c/c++ 学习互助qq群:877684253

c/c++ linux 进程 fork wait函数

本人微信:xiaoshitou5854