linux学习(3)--进程

来源:互联网 发布:算法导论中文第四版pdf 编辑:程序博客网 时间:2024/05/18 02:56

每个 Linux 命令都与系统中的程序对应,输入命令,Linux 就会创建一个新的进程。例如使用 ls 命令遍历目录中的文件时,就创建了一个进程。


系统通过一个五位数字跟踪程序的运行状态,这个数字称为 pid 或进程ID。每个进程都拥有唯一的 pid


理论上,五位数字是有限的,当数字被用完时,下一个 pid 就会重新开始,所以 pid 最终会重复。但是,两个 pid 一样的进程不能同时存在,因为Linux会使用 pid 来跟踪程序的运行状态。


创建进程有两种方式来创建进程:前台进程和后台进程

前台进程

默认情况下,用户创建的进程都是前台进程;前台进程从键盘读取数据,并把处理结果输出到显示器。

当程序运行在前台时,由于命令提示符($)还未出现,用户不能输入其他命令;即使程序需要运行很长时间,也必须等待程序运行结束才能输入其他命令


后台进程

后台进程与键盘没有必然的关系。当然,后台进程也可能会等待键盘输入。

后台进程的优点是不必等待程序运行结束就可以输入其他命令。

创建后台进程最简单的方式就是在命令的末尾加 &,例如

$ls ch*.doc &

查看正在运行的进程可以使用 ps 命令查看进程的运行状态,包括后台进程,例如:

$psPID       TTY      TIME        CMD18358     ttyp3    00:00:00    sh18361     ttyp3    00:01:31    abiword18789     ttyp3    00:00:00    ps
还可以结合 -f 选项查看更多信息,f 是 full 的缩写,例如:
$ps -fUID      PID  PPID C STIME    TTY   TIME CMDamrood   6738 3662 0 10:23:03 pts/6 0:00 first_oneamrood   6739 3662 0 10:22:54 pts/6 0:00 second_oneamrood   3662 3657 0 08:10:53 pts/6 0:00 -kshamrood   6892 3662 4 10:51:50 pts/6 0:00 ps -f
每列的含义如下:
列描述UID进程所属用户的ID,即哪个用户创建了该进程。PID进程ID。PPID父进程ID,创建该进程的进程称为父进程。CCPU使用率。STIME进程被创建的时间。TTY与进程有关的终端类型。TIME进程所使用的CPU时间。CMD创建该进程的命令。




终止进程

当进程运行在前台时,可以通过 kill 命令或 Ctrl+C 组合键来结束进程。

如果进程运行在后台,那么首先要通过 ps 命令来获取进程ID,然后使用 kill 命令“杀死”进程,


僵尸进程和孤儿进程

正常情况下,子进程被终止时会通过 SIGCHLD 信号通知父进程,父进程可以做一些清理工作或者重新启动一个新的进程。但在某些情况下,父进程会在子进程之前被终止,那么这些子进程就没有了“父亲”,被称为孤儿进程

init 进程会成为所有孤儿进程的父进程。init 的 pid 为1,是Linux系统的第一个进程,也是所有进程的父进程。

如果一个进程被终止了,但是使用 ps 命令仍然可以查看该进程,并且状态为 Z,那么这就是一个僵尸进程。僵尸进程虽然被终止了,但是仍然存在于进程列表中。一般僵尸进程很难杀掉,你可以先杀死他们的父进程,让他们变成孤儿进程,init 进程会自动清理僵尸进程。





0 0