嵌入式开发学习———Linux环境下IO进程线程学习(四)
进程相关函数
fork
创建一个子进程,子进程复制父进程的地址空间。父进程返回子进程PID,子进程返回0。
pid_t pid = fork();
if (pid == 0) { /* 子进程代码 */ }
else { /* 父进程代码 */ }
getpid
获取当前进程的PID。
pid_t pid = getpid();
getppid
获取父进程的PID。
pid_t ppid = getppid();
wait
阻塞等待任意子进程结束,返回终止子进程的PID。
int status;
pid_t child_pid = wait(&status);
waitpid
等待指定子进程结束,可设置非阻塞选项。
int status;
pid_t child_pid = waitpid(pid, &status, WNOHANG);
exit
正常终止进程,清理I/O缓冲区。
exit(0); // 0表示成功
_exit
立即终止进程,不清理缓冲区。
_exit(1); // 1表示失败
作业:
1.创建一个进程扇
父
子1 子2 子3......
#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid1,pid2,pid3;if((pid1=fork())==0){//sleep(1);puts("这是子进程1!");}else if(pid1>0){if((pid2=fork())==0){//sleep(2);puts("这是子进程2!");}else if(pid2>0){if((pid3=fork())==0){//sleep(3);puts("这是子进程3!");}else if(pid3>0){puts("这是父进程!");//waitpid(pid3,NULL,0);}elseERROR_MSG("pid3=fork error");}elseERROR_MSG("pid2=fork error");}elseERROR_MSG("pid1=fork error");while(1);return 0;
}
运行结果:
2.创建一个进程链
父 ---- 子 ---- 孙 ---- 曾孙
#include <myhead.h>int main(int argc, const char *argv[])
{pid_t pid1,pid2,pid3;if((pid1=fork())==0){if((pid2=fork())==0){if((pid3=fork())==0){puts("这是曾孙进程!");}else if(pid3>0){puts("这是孙子进程!");}elseERROR_MSG("pid3=fork error");}else if(pid2>0){puts("这是子进程!");}elseERROR_MSG("pid2=fork error");}else if(pid1>0){puts("这是父进程!");waitpid(pid3,NULL,0);}elseERROR_MSG("pid1=fork error");while(1);return 0;
}
运行结果:
3.牛客网