进程线程例子
来源:互联网 发布:uber软件下载 编辑:程序博客网 时间:2024/06/05 04:52
fork()创建子进程
#include <unistd.h>#include <sys/types.h>#include <sys/wait.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <math.h>int main(void){ pid_t child; /* 创建子进程 */ if((child=fork())==-1) { printf("Fork Error : %s\n", strerror(errno)); exit(1); } else if(child==0) //子进程 { printf("I am the child: %d\n", getpid()); exit(0); } else//父进程 { printf("I am the father:%d\n",getpid()); return 0; }}
fork()创建的子进程后,父子进程是同时、独立运行的,进程的空间是相互独立的,没有固定先后顺序。
jbc@jbc-virtual-machine# 45:~/work/guoqian/code1/2-2-1$ ./fork_pidI am the child: 3255I am the father:3254jbc@jbc-virtual-machine# 46:~/work/guoqian/code1/2-2-1$ ./fork_pidI am the father:3260I am the child: 3261
vfork()创建子进程
#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <math.h> int main(void) { pid_t child; /* 创建子进程 */ if((child=vfork())==-1) { printf("Fork Error : %s\n", strerror(errno)); exit(1); } else if(child==0) // 子进程 { sleep(1); //子进程睡眠一秒 printf("I am the child: %d\n", getpid()); exit(0); } else //父进程 { printf("I am the father:%d\n",getpid()); exit(0); } }
vfork()创建子进程后必定是子进程运行完才会运行父进程。
jbc@jbc-virtual-machine# 55:~/work/guoqian/code1/2-2-2$ ./a.out I am the child: 3504I am the father:3503jbc@jbc-virtual-machine# 56:~/work/guoqian/code1/2-2-2$ ./a.out I am the child: 3509I am the father:3508
创建线程
#include <stdio.h>#include <pthread.h>#include <unistd.h>#include <stdlib.h>struct menber { int a; char *s; }; /*线程执行函数*/void *create(void *arg){ struct menber *temp; temp=(struct menber *)arg; printf("menber->a = %d \n",temp->a); printf("menber->s = %s \n",temp->s); return (void *)0;} int main(int argc,char *argv[]){ pthread_t tidp; int error; struct menber *b; /*为结构体指针b分配内存并赋值*/ b=(struct menber *)malloc( sizeof(struct menber) ); b->a = 4; b->s = "zieckey"; /*创建线程并运行线程执行函数*/ error = pthread_create(&tidp, NULL, create, (void *)b); if( error ) { printf("phread is not created...\n"); return -1; } sleep(1); //进程睡眠一秒使线程执行完后进程才会结束 printf("pthread is created...\n"); return 0; }
线程和任务(task)有点类似,使用pthread_create()创建线程后,线程为就绪态,运行结果:
jbc@jbc-virtual-machine# 64:~/work/guoqian/code1/2-5-1$ ./a.out menber->a = 4 menber->s = zieckey pthread is created...
线程等待
#include <pthread.h>#include <unistd.h>#include <stdio.h>void *thread(void *str){ int i; for (i = 0; i < 3; ++i) { sleep(2); printf( "This in the thread : %d\n" , i ); } return NULL;} int main(){ pthread_t pth; int i; /*创建线程并执行线程执行函数*/ int ret = pthread_create(&pth, NULL, thread, NULL); printf("The main process will be to run,but will be blocked soon\n"); /*阻塞等待线程退出*/ pthread_join(pth, NULL); printf("thread was exit\n"); for (i = 0; i < 3; ++i) { sleep(1); printf( "This in the main : %d\n" , i ); } return 0;}
pthread_join()将会阻塞当前进程直到线程退出,运行结果:
The main process will be to run,but will be blocked soonThis in the thread : 0This in the thread : 1This in the thread : 2thread was exitThis in the main : 0This in the main : 1This in the main : 2
阅读全文
0 0
- 进程线程例子
- python进程与线程混合使用例子
- 线程,进程,单线程,多线程,附有并发例子
- python从线程结束主进程的例子
- 进程线程
- 线程 & 进程
- 进程/线程
- 进程|线程
- 进程&线程
- 进程 线程
- 进程、线程
- 进程--线程
- 线程 、 进程
- 进程,线程
- 线程、进程
- 进程 线程
- 进程、线程
- 线程,进程
- 第5周 【项目3】 括号的匹配
- Android7.0文件读写(获取拍照结果)笔记
- mysql 表分区 按天分区
- Siemens.NX.Nastran.12.0.Win64.&.Linux64 2DVD
- iOS-判断字符串为空你以为这么简单吗?
- 进程线程例子
- ZooKeeper的典型应用场景之分布式协调/通知。
- Redis初始化
- git commit -am 之后,撤销并保留修改
- 数据结构期末课堂总结
- poi读取Excel时日期为数字 的解决方法
- 正则笔记
- Idea工具的破解
- 数据结构实验之栈与队列一:进制转换