Linux/Unix 中的进程
一个程序/命令在执行时,系统会为进程提供一个特殊的实例。该实例由正在执行的进程可能使用的所有服务/资源组成。
- 每当在 Unix/Linux 中发出命令时,它都会创建/启动一个新进程。例如,当发出 pwd 用于列出用户所在的当前目录位置时,将启动一个进程。
- Unix/Linux 通过一个 5 位的 ID 号码记录进程,这个号码就是调用进程 ID 或 PID。系统中的每个进程都有一个唯一的PID。
- 因为使用了所有可能的组合,所以用完的 pid 可以再次用于较新的进程。
- 在任何时候,系统中都不存在具有相同 pid 的两个进程,因为 Unix 使用 pid 来跟踪每个进程。
初始化进程
进程可以通过两种方式运行:
方法一:前台进程:每个进程启动时默认运行在前台,接收键盘输入,输出到屏幕。发出 pwd 命令时
$ ls pwd
输出:
$ /home/geeksforgeeks/root
当一个命令/进程在前台运行并占用大量时间时,无法运行或启动其他进程,因为在程序完成处理并出现之前,提示将不可用。
方法二:后台进程:在没有键盘输入的情况下在后台运行,等待需要键盘输入。因此,其他进程可以与在后台运行的进程并行执行,因为它们不必等待前一个进程完成。
添加 & 与命令一起将其作为后台进程启动
$ pwd &
由于 pwd 不需要来自键盘的任何输入,它进入停止状态,直到移到前台并给出任何数据输入。因此,按 Enter 键:
输出:
[1] + Done pwd
$
第一行包含有关后台进程的信息——作业号和进程 ID。它告诉您 ls 命令后台进程成功完成。第二个是另一个命令的提示。
跟踪正在进行的过程
ps(进程状态)可用于查看/列出所有正在运行的进程。
$ ps
PID TTY TIME CMD
19 pts/1 00:00:00 sh
24 pts/1 00:00:00 ps
有关更多信息 -f(完整)可以与 ps 一起使用
$ ps –f
UID PID PPID C STIME TTY TIME CMD
52471 19 1 0 07:20 pts/1 00:00:00f sh
52471 25 19 0 08:04 pts/1 00:00:00 ps -f
对于单进程信息,使用 ps 和进程 id
$ ps 19
PID TTY TIME CMD
19 pts/1 00:00:00 sh
对于正在运行的程序(命名进程), Pidof查找进程 ID(pids)
ps 描述的字段描述为:
- UID :该进程所属的用户 ID(运行它的人)
- PID : 进程 ID
- PPID :父进程 ID(启动它的进程的 ID)
- C : 进程的 CPU 使用率
- STIME : 进程开始时间
- TTY : 与进程关联的终端类型
- TIME :进程占用的CPU时间
- CMD :启动此进程的命令
还有其他选项可以与 ps 命令一起使用:
- -a : 显示所有用户的信息
- -x :显示有关没有终端的进程的信息
- -u :显示附加信息,如 -f 选项
- -e : 显示扩展信息
停止进程:
在前台运行时,按 Ctrl + c (中断字符)将退出命令。对于在后台运行的进程,如果 pid 已知,则可以使用 kill 命令。
$ ps –f
UID PID PPID C STIME TTY TIME CMD
52471 19 1 0 07:20 pts/1 00:00:00 sh
52471 25 19 0 08:04 pts/1 00:00:00 ps –f
$ kill 19
Terminated
如果进程忽略常规 kill 命令,您可以使用 kill -9 后跟进程 ID。
$ kill -9 19
Terminated
其他进程命令:
bg :一个作业控制命令,它恢复挂起的作业,同时保持它们在后台运行
句法:
bg [ job ]
例如:
bg %19
fg :它通过在前台运行来继续停止的作业。
句法:
fg [ %job_id ]
例如
fg 19
top : 该命令用于显示 Linux 工作环境中所有正在运行的进程。
句法:
top
nice :它启动一个新进程(作业)并同时为其分配一个优先级(nice)值。
句法:
nice [-nice value]
nice 值范围从 -20 到 19,其中 -20 是最高优先级。
renice :使用renice更改已运行进程的优先级。
句法:
renice [-nice value] [process id]
df :它显示文件系统正在使用的可用磁盘空间量
句法:
df
输出:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/loop0 18761008 15246876 2554440 86% /
none 4 0 4 0% /sys/fs/cgroup
udev 493812 4 493808 1% /dev
tmpfs 100672 1364 99308 2% /run
none 5120 0 5120 0% /run/lock
none 503352 1764 501588 1% /run/shm
none 102400 20 102380 1% /run/user
/dev/sda3 174766076 164417964 10348112 95% /host
free :它显示系统中空闲和使用的物理内存和交换内存的总量,以及内核使用的缓冲区
句法:
free
输出:
total used free shared buffers cached
Mem: 1006708 935872 70836 0 148244 346656
-/+ buffers/cache: 440972 565736
Swap: 262140 130084 132056
进程类型
- 父子进程: ps –f 命令的第 2 和第 3 列显示进程 ID 和父进程 ID 号。对于每个用户进程,系统中有一个父进程,大多数命令都将 shell 作为它们的父进程。
- 僵尸和孤儿进程:在完成其执行后,子进程被终止或杀死,SIGCHLD 更新父进程关于终止的信息,从而可以继续分配给它的任务。但是有时在子进程终止之前父进程被杀死时,子进程成为孤儿进程,所有进程的父进程“init”进程成为它们的新pid。
被杀死但仍然在进程状态或进程表中显示其条目的进程称为僵尸进程,它们已死且未被使用。 - 守护进程:它们是与系统相关的后台进程,通常以root权限运行,并从其他进程请求服务,它们大部分时间都在后台运行并等待它可以与ex print daemon一起工作的进程。
执行 ps –ef 时,进程带有 ?在 tty 字段中是守护进程。