1、启动Process
当启动一个进程(运行一个命令),有两种方式可以运行它:
- 前台进程(Foreground Processes)
- 后台进程(Background Processes)
1)前台进程
默认情况下,启动的每个进程都在前台运行。它从键盘获取输入并将输出发送到屏幕。
可以通过ls命令看到这种情况。如果希望列出当前目录中的所有文件,可以使用以下命令:
$ ls cjavapy*.doc
显示所有文件,文件名以ch开头,以.doc结尾:
cjavapy01-1.doc cjavapy010.doc cjavapy02.doc cjavapy03-2.doc
cjavapy04-1.doc cjavapy040.doc cjavapy05.doc
进程在前台运行,输出直接指向我的屏幕,如果ls命令需要任何输入(不需要),会从键盘等待它。
当一个程序在前台运行并且非常耗时时,不能运行其他命令(启动任何其他进程),因为提示符在程序完成处理并输出之前是不可用的。
2)后台进程
一个后台进程在不连接键盘的情况下运行。如果后台进程需要任何键盘输入,它就会等待。
在后台运行进程的好处是,可以运行其他命令,你不必等到它完成了才开始另一个!
启动后台进程的最简单方法是在命令末尾添加&号。
例如,
$ ls cjavapy*.doc &
将显示所有名称以cjavapy
开头、以.doc
结尾的文件:
cjavapy01-1.doc cjavapy010.doc cjavapy02.doc cjavapy03-2.doc
cjavapy04-1.doc cjavapy040.doc cjavapy05.doc
如果ls命令需要任何输入(不需要),将进入停止状态,直到我们将它移到前台并从键盘上给它数据。
第一行包含关于后台进程的信息——作业号和进程ID。需要知道作业号,以便在后台和前台之间操作它。
按下Enter键,将看到以下内容:
[1] + Done ls cjavapy*.doc &
上面信息说明ls命令后台进程已成功完成。
2、查看正在运行的进程
通过运行ps
(进程状态)命令可以很容易地看到自己的进程,如下所示,
$ ps
PID TTY TIME CMD
538 ttys000 0:00.13 -bash
19799 ttys000 0:00.07 ssh root@192.168.31.11
982 ttys001 0:00.08 -bash
1061 ttys002 0:00.75 -bash
1128 ttys003 0:00.05 -bash
ps
最常用的标志之一是-f
(f
代表full
)选项,它提供了更多信息,如下:
$ ps -f
UID PID PPID C STIME TTY TIME CMD
501 538 535 0 25 821 ttys000 0:00.13 -bash
501 19799 538 0 日02下午 ttys000 0:00.07 ssh root@192.168.31.11
501 982 980 0 25 821 ttys001 0:00.08 -bash
501 1061 1060 0 25 821 ttys002 0:00.75 -bash
501 1128 1106 0 25 821 ttys003 0:00.05 -bash
ps -f
命令显示的所有字段的说明,如下表,
列名 | 说明 |
UID | 该进程所属的用户ID(运行它的人) |
PID | Process ID(进程ID) |
PPID | Parent process ID (父进程ID,启动它的进程的ID) |
C | 进程的CPU利用率 |
STIME | Process 开始时间 |
TTY | 与进程关联的终端类型 |
TIME | 进程占用的CPU时间 |
CMD | 启动此进程的命令 |
还有其他选项可以与ps
命令一起使用,如下表,
选项 | 说明 |
-a | 显示所有用户信息 |
-x | 显示没有终端的进程的信息 |
-u | 显示附加信息,如-f选项 |
-e | 显示额外扩展信息 |
2、停止进程
结束一个过程有几种不同的方法。通常,在基于控制台的命令中,发送CTRL + C
键(默认中断字符)将退出命令。当进程以前台模式运行时,此操作有效。如果一个进程正在后台运行,应该使用ps
命令获取它的PID。之后,可以使用kill
命令终止进程,如下所示,
$ ps -f
UID PID PPID C STIME TTY TIME CMD
501 538 535 0 25 821 ttys000 0:00.13 -bash
501 19799 538 0 日02下午 ttys000 0:00.07 ssh root@192.168.31.11
501 982 980 0 25 821 ttys001 0:00.08 -bash
501 1061 1060 0 25 821 ttys002 0:00.75 -bash
501 1128 1106 0 25 821 ttys003 0:00.05 -bash$kill 1128
Terminated
kill
命令终止bash
进程。如果进程忽略常规的kill命令,可以使用kill -9
加上PID(进程号),如下所示,
$ kill -9 1128
Terminated
3、父进程和子进程
每个Linux进程有两个ID号分配给它:进程ID (pid)和父进程ID (ppid)。系统中的每个用户进程都有一个父进程。
运行的大多数命令都将shell作为它们的父命令。运行ps -f示例,其中该命令同时列出了进程ID和父进程ID。
4、僵尸进程和孤儿进程(Zombie 和 Orphan Process)
通常,当子进程被终止时,父进程会通过SIGCHLD信号更新。然后,父节点可以根据需要执行其他任务或重新启动新的子节点。但是,有时父进程会在子进程结束之前结束。在这种情况下,所有进程的父进程,也就是init进程,将成为新的PPID(父进程ID)。在某些情况下,这些进程被称为孤儿进程。
当一个进程被终止时,ps列表仍然可以显示具有Z状态的进程。这是一个僵尸进程。该进程已死且未被使用。这些过程不同于孤儿过程。它们已经完成了执行,但仍然在进程表中找到一个条目。
4、守护进程(Daemon Process)
守护进程是与系统相关的后台进程,通常以root和来自其他进程的服务请求的权限运行。
守护进程没有控制终端。无法打开/dev/tty如果执行一个"ps -ef"并查看tty字段,那么所有守护进程都将具有一个?。
确切地说,守护进程是在后台运行的进程,通常等待它能够处理的事情发生。例如,打印机守护进程等待打印命令。
如果有一个需要长时间处理的程序,那么值得将其设置为守护进程并在后台运行。
5、top 命令
top命令是一个非常有用的工具,可以快速显示按各种标准排序的进程。
它是一个交互式诊断工具,经常更新并显示有关物理和虚拟内存、CPU使用情况、平均负载和繁忙进程的信息。
运行top命令和查看不同进程的CPU利用率统计信息,使用简单语法如下,
$ top
6、Job ID与Process ID
后台进程和挂起进程通常通过作业号(Job ID)进行操作。这个数字与Process ID不同,使用它是因为它更短。
此外,一个作业可以由多个进程组成,这些进程可以串联运行,也可以同时并行运行。使用Job ID比跟踪单个进程更容易。