提示:以下是本篇文章正文内容,下面案例可供参考
一、什么是程序还有进程,之间的区别?
程序是静态的概念,例如gcc xxx.c -o pro,磁盘生成的pro文件可以理解为程序,当pro运行起来系统就有了一个进程,区别是动态与静态之间的区别,进程就是程序跑起来的概念
二、如何让查看系统中的进程
Linux下有个指令为ps指令
显示进程的指令为:ps -aux,还有top指令类似于window的任务管理器
查找某个特定的进程可以通过命令grep配合ps指令来过滤多余的进程
显示特定的以进程指令为:ps -aux|grep xxx. xxx为某进程带有的特定关键词
三、什么是进程标识符
每个进程有一个非负整数表示自己的唯一ID,叫pid
pid = 0;是交换进程。作用:进程调度
pid = 1;init进程。作用进程初始化,相当于开机启动运行的第一个程序
getpid()可以获取程序自身的pid号
getppid()可以获取父进程的pid号
四、fork之后父子进程之间的变化
进程A创建了进程B,A就是父进程,B是子进程
fork()进程会调用会返回两次,返回为0表示当前进程为子进程,非负为父进程,返回失败返回值为-1,通过下列代码观察fork之后程序的变化
#include <sys/types.h>
#include <unistd.h>
#include<stdio.h>
int main()
{
pid_t pid;
pid_t pid2;
pid = getpid();//记录最开始的进程标识符PID
printf("before fork is %d\n",pid);//将最开始的原本的pid打印
fork();//创建进程,此时程序有两个进程在往下运行,下面的内容将会被两个进程分别调用
pid2 = getpid();//两个进程分别获取自己的pid号
printf("before fork is %d\n",pid);
if(pid == pid2){//判断当前的进程为父进程
printf("this is father print\n");
}
else{//否则是子进程
printf("this is child print pid=%d\n",getpid());
}
return 0;
}
~
~
~
~
~
~
运行结果:
先运行的进程为父进程,后运行的进程为子进程