什么是进程?
可执行程序运行的实例被称为进程。例如,当我们在打开一个程序两次时,会看到两个窗口,每个窗口就是一个运行实例,即进程。
用进程可以实现高级编程,使一个应用程序一次调用多个进程协同工作,实现软件性能的稳定和快速。
1.进程ID
当linux 系统启动之后,其中会运行很多进程。当对于这么多的进程我们怎么查看,怎么区分它们呢。这就引出进程ID概念(Process ID,一般用pid表示)。pid是系统有序分配的一个16位数字,没个进程拥有唯一的一个pid,因此linux 系统通过pid区分每一个进程。每一个进程都由别parent进程启动的(除了init之外,ini是系统启动时第一个进程),父进程ID一般用ppid。linux 进程的启动像一棵树,init是这棵树的root.除了叶子节点的进程没有子进程外,别的节点都有parent进程和child进程。
以下代码,展示如何获取pid和ppid
#include "stdio.h"
#include "unistd.h"
#include "sys/types.h"
int main()
{
pid_t pid,ppid;
pid = getpid();
ppid = getppid();
printf("Process ID:%d\n",pid);
printf("Paretn ID:%d\n",ppid);
return 0;
}
当你在同一个终端窗口中运行多次之后会发现,pid每次都不同,ppid不变。这是因为每次启动一个新进程,而用的是同一个shell(即父进程)。
2.ps命令简介
系统中通常运行多个进程,我们如果需要查看可以在终端用ps查看如果在终端中只输入ps,那么会列出以下两种进程:1.控制该终端的进程。2.通过该终端打开的进程。
如果要查看更加详细的信息,可以调用:
ps -e -o pid,ppid,command
-e :显示正在运行于linux系统中的所有进程
-o :显示进程的哪些信息。在这里pid,ppid,command分别表示:进程id,父进程id,运行在该进程中的命令行
3.终止进程
可以用以下命令行终止一个进程:
kill 进程id
在用kill终止一个进程时,进程会接受到一个SIGTERM信号,如果在要kill的进程中没有对SIGTERM进行明确处理,会立刻终止进程,否则执行SIGTERM处理函数。