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
本人微信:xiaoshitou5854
推荐阅读
-
深入解读Linux进程函数fork(),vfork(),execX()
-
Windows C++遍历进程查找exe是否在运行 CreateToolhelp32Snapshot函数
-
c/c++ linux 进程间通信系列3,使用socketpair,pipe
-
c/c++ linux 进程间通信系列4,使用共享内存
-
c/c++ linux epoll系列3 利用epoll_wait设置timeout时间长度
-
c/c++ linux 进程 fork wait函数
-
c/c++ linux 进程间通信系列6,使用消息队列(message queue)
-
c/c++ linux 进程间通信系列5,使用信号量
-
c/c++ linux 进程间通信系列7,使用pthread mutex
-
c/c++ linux epoll系列2 利用epoll_wait查看是否可以送信