Linux-----进程处理(子进程创建)
【尚硅谷嵌入式Linux应用层开发,linux网络编程,linux进程线程,linux文件io】https://www.bilibili.com/video/BV1DJ4m1M77z?p=35&vd_source=342079de7c07f82982956aad8662b467
main函数
fork创建进程
fork()参数
/**
* @brief 创建一个子进程(相当于复制,包括内存空间)
* void: 不需要填写参数
*
* @return pid_t pid_t(int值)
* (1) 在父进程中 返回子进程的PID
* (2) 在子进程中 返回0
* (3) 发生错误 返回-1
*/
pid_t fork(void);
getpid() 获取进程PID
#include <sys/types.h>
#include <unistd.h>
/**
* @brief 返回调用进程的PID
*
* @return pid_t 不会失败,必然返回进程PID
*/
pid_t getpid(void);
getppid() 获取父进程PID
#include <sys/types.h>
#include <unistd.h>
/**
* @brief 返回调用进程父进程的PID
*
* @return pid_t 不会失败,必然返回父进程PID,即PPID
*/
pid_t getppid(void);
代码案例
getpid()查看进程号
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
//调用fork之前代码都是在父进进行的
printf("君不见黄河之水天上来,奔流到海不复回_%d\n",getpid());
// 使用fork创建子进程
while (1)
{
/* code */
}
return 0;
}
fork()创建子进程
fork() 之后的代码都是在父子进程中各自执行一次的
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
//调用fork之前代码都是在父进进行的
printf("父进程PID:%d\n", getpid());
// 使用fork创建子进程
/* 不需要传参
return int 进程号
(1) -1出错
(2) 父进程中表示子进程PID
(3) 子进程中显示0
*/
// fork() 之后的代码都是在父子进程中各自执行一次的
pid_t pid = fork();
printf("子进程PID:%d\n", pid);
while (1)
{
/* code */
}
return 0;
}
条件判断使得父子进程执行各自对应的代码
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void) {
//调用fork之前代码都是在父进进行的
printf("父进程PID:%d\n", getpid());
// 使用fork创建子进程
/* 不需要传参
return int 进程号
(1) -1出错
(2) 父进程中表示子进程PID
(3) 子进程中显示0
*/
// fork() 之后的代码都是在父子进程中各自执行一次的
pid_t pid = fork();
// printf("子进程PID:%d\n", pid);
if (pid < 0) {
perror("getpid");
}
else if (pid==0)
{
printf("子进程:新的子进程:%d, 其父进程:%d\n", getpid(), getppid());
}
else {
printf("父进程: 父进程%d,创建了进程%d\n", getpid(), pid);
}
while (1)
{
/* code */
}
return 0;
}