文章目录
我将通过代码的方式说明一些进程的基本操作
获取当前进程的ID 和父进程ID
#include<stdio.h>
#include<unistd.h> //包含我们进程相关的系统调用
int main(int argc,char* *argv){
pid_t my_pid,parent_pid; //pid_t是我们进程号的宏定义
my_pid = getpid();//getpid()获取当前进程的ID
parent_pid = getppid();//获取父进程ID
printf("my_pid = %d\n",my_pid);
printf("parent_pid = %d\n",parent_pid);
return 0;
}
执行结果
我们还可以通过查看父进程看下我们的程序是哪一个进程创建的。调用命令ps -ef | grep 20524得到结果-bash啦
进程的创建
linux系统中创建进程采用fork系统调用,fork出来的进程除了pid其他的和父进程一样。为了区分父进程和子进程我们需要判断fork的返回值。失败返回-1,如果是父进程则返回子进程的ID,子进程就会返回0。如果没听明白的话。我们试想一下,父进程P与子进程C的程序是一样的,我们创建C肯定是为了执行不一样的任务。一样的代码如何执行不同的任务?所以就需要fork的返回值()来做分支判断。如果是0说明当前运行的是子进程C,就调用fork==0的分支,否则当前就是父进程在运行,就执行其他的。下面看代码:
#include<unistd.h>
#include<sys/types.h>
#include<stdio.h>
#include<errno.h>
int main(int argc,char* * argv){
pid_t child;
printf("父进程ID = %d\n",getpid());
child = fork();
if (child == -1){
printf("fork error\n");
}else if(child == 0){
printf("子进程ID = %d\n",getpid());
sleep(5);
exit(0);
}else{