linux 进程 fork wait函数
fork:创建子进程
wait:父进程等待子进程结束,并销毁子进程,如果父进程不调用wait函数,子进程就会一直留在linux内核中,变成了僵尸进程。
fork函数的详细说明:
wait函数详细说明参考:
例子1:不注释掉exit(0)的话,子进程不会执行到printf(“end pid: %dn”, 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 : %dn", getpid()); //exit(0); } else{ int status; pid_t waitpid; printf("parent process : childpid=%d , mypid=%dn",pid, getpid()); waitpid = wait(&status); printf("waitpid:%dn", waitpid); } printf("end pid: %dn", 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 : %dn", getpid()); i += 500; } else{ printf("parent process : childpid=%d , mypid=%dn",pid, getpid()); i += 1024; } printf("i=%dn", 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=%dn", *val); for(int i = 0; i < 10; ++i){ global_val++; printf("sub_thread : i=%d, g=%dn", 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=%dn", 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
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/606880.html