Skip to main content

任务管理

任务管理

操作系统最重要的任务之一是使用户充分有效的利用系统资源,当系统资源在一定或有限的情况下,需要同时执行更多程序,高效地完成更多任务。

进程、作业、任务调度是操作系统的重要任务之一,本节主要介绍管理相关的常用命令,包括ps、kill、fg/bg、nohup、crontab、重定向等。

ps命令

要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,ps命令就是最基本的进程查看命令。使用该命令可以确定有哪些进程正在运行以及运行的状态、进程是否结束、进程是否处于僵尸态、哪些进程占用了过多的资源等。总之,大部分信息都是可以通过执行该命令得到。ps是显示进程的瞬间状态,并不动态实时显示;如果想对进程进行实时监控应该用top命令。统信服务器操作系统中进程有如下5种状态以及状态码:

  1. 运行(R):正在运行或在运行队列中等待。

  2. 中断(S):休眠中,受阻并在等待某个条件的形成或接受到信号。

  3. 不可中断(D):收到信号不唤醒和不可运行,进程必须等待直到有中断发生。

  4. 停止(T):收到SIGSTOP、SIGSTP、SIGTIN、SIGTOU信号后停止运行。

  5. 僵死(Z):进程已终止,但进程描述符依然存在,直到父进程调用wait4()系统,调用后释放。

■命令格式:ps [选项]

■常用选项

ps常用选项

选项 描述
-A 所有的进程均显示出来,与-e具有同样的效用。
-a 显示现行终端机下的所有进程,包括其他用户的进程。
-u 以用户为主的进程状态。
-e 选择所有进程,与-A相同。
x 通常与-a这个参数一起使用,可列出较完整信息。
l 较长、较详细的将所查询PID的信息列出。
j 工作的格式(jobs format)。
f 以完整格式输出,包括命令行。

■执行示例

◆执行ps -ef命令,显示所有进程的信息以及执行的命令行。

◆执行ps -u root命令,显示用户root的进程信息。

◆执行ps -ef | grep java命令,查找并显示java进程的信息。

kill命令

kill是向进程发送信号的命令。如果不指定信号,则发送SIGTERM(15)终止指定进程;如果无法正常终止该进程,可以向进程号发送SKILL(9)信号,该信号将强制结束进程。

■命令格式:kill [选项] [参数]

■常用信号

kill参数说明

选项 信号名 说明
0 EXIT 程序退出时收到该信息。
1 HUP 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2 INT 表示结束进程,但并不是强制性的,常用的“Ctrl+C”快捷键发出的就是该信号。
3 QUIT 退出。
9 KILL 杀死进程,即强制结束进程。
11 SEGV 段错误。
15 TERM 正常结束进程,是kill命令默认发送的信号。

■执行示例

◆执行kill -9 12345命令,强制杀死进程号为12345的进程。

◆执行kill -KILL 12345命令,强制杀死进程号为12345的进程。

◆执行kill -l命令,显示信号列表。

fg/bg命令

统信服务器操作系统提供了fg和bg命令,让管理员轻松调度正在运行的任务。fg命令可以将后台中的命令调至前台继续运行,如果后台中存在多个命令,可以用fg %jobnumber将选中的命令调出。bg命令可以将一个后台暂停的命令换成继续执行,如果后台中存在多个命令,可以用bg %jobnumber将选中的命令调出。

假设前台运行的一个程序需要很长的时间,但是需要处理其他的事情,可以按下键盘上的“Ctrl+z”快捷键,将此程序挂起,然后可以看到系统提示。

■命令格式:fg <作业号>;bg <作业号>

■执行示例

  1. 执行jobs命令,查看当前正在进行的任务。
[root@localhost ~]#jobs

[1] 运行中 tar cvf homebak.tar /home &

  1. 执行bg 1命令,将作业号为1且在后台暂停的命令,变成继续执行。

  2. 执行fg 1命令,将作业号为1调回到前台,继续执行。

:::note

执行tar cvf homebak.tar /home任务时,如果想要暂停,可以使用“Ctrl+z”快捷键。 :::

nohup命令

nohup命令用于运行由Command参数和任何相关的Arg参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后,要使用nohup命令运行后台中的程序,需添加&(表示“and”的符号)到命令的尾部。

■命令格式:nohup Command [ Arg … ] [&]

■执行示例:

  1. 执行nohup start.sh &命令,将脚本程序在后台保持一直运行状态。

  2. 注销当前用户后,再次登录系统。

  3. 执行ps -ef | grep start.sh命令,显示脚本进程一直在运行中。

crontab命令

crontab命令用于定期执行程序。

■命令格式:crontab [选项] [参数]

■常用选项

crontab常用选项

选项 说明
-u user:用来设定某个用户的crontab服务,例如"-u demo"表示设备demo用户的crontab服务,此参数一般由root用户来运行。
-e 编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l 显示某用户的crontab文件内容。如果不指定用户,则表示显示当前用户的crontab文件内容。
-r 从“/var/spool/cron”删除某用户的crontab文件。如果不指定用户,则默认删除当前用户的crontab文件。
-i 在删除用户的crontab文件时,给确认提示。

■常用时间对照表

crontab时间定义说明

位置 说明 数值范围
第一个* 一小时当中的第几分钟(minute) 0~59
第二个* 一天当中的第几小时(hour) 0~23
第三个* 一个月当中的第几天(day) 1~31
第四个* 一年当中的第几个月(month) 1~12
第五个* 一周当中的星期几(week) 0~7(0和7都代表星期日)

■特殊符号

crontab特殊符号说明

符号 说明
*(星号) 代表任何时间。比如第一个"*"就代表一小时中每分钟都执行一次的意思。
,(逗号) 代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的8点0分、12点0分、16点0分都执行一次命令。
-(中杠) 代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨5点0分执行命令。
/(正斜线) 代表每隔多久执行一次。比如"/10***命令",代表每隔10分钟就执行一次命令。

■执行示例

◆执行crontab -e命令后,输入5 5 * * 2 /sbin/shutdown -r now,系统会在每周二的凌晨5点05分重启一次。

◆如在每月1日、10日、15日的凌晨3点30分都定时执行日志备份脚本autobak.sh,则执行crontab -e命令后,输入30 3 1,10,15 * * /root/sh/autobak.sh。

◆执行crontab -l命令,查看定时任务。

◆执行crontab -r命令,删除定时任务。

重定向命令

■命令格式

重定向格式说明

重定向格式 说明
cmd > file 把标准输出重定向到一个新文件中。
cmd >> file 把标准输出重定向到一个文件中(追加)。
cmd 1 > file 把标准输出重定向到一个文件中。
cmd > file 2 > & 1 把标准输出和标准错误一起重定向到一个文件中。
cmd 2 > file 把标准错误重定向到一个文件中。
cmd 2 >> file 把标准错误输出重定向到一个文件中(追加)。
cmd >> file 2 > & 1 把标准输出和标准错误一起重定向到一个文件中(追加)。
cmd < file > file2 cmd命令以file文件作为输入,以file2文件作为输出。
cmd < file cmd命令以file文件作为输入。
cmd & m 把标准输出重定向到文件描述符m中。

■执行示例

◆执行ls -l /usr/ > ls.txt命令,将某个目录下所有文件及目录的列表保存在一个文本文件中。

◆执行ls -l /usr/ >> ls.txt命令,将某个目录下所有文件及目录的列表追加到一个文本文件中。

:::note

使用>>可以在实现重定向时不覆盖原有内容,而是在文件末尾追加内容。 :::

◆执行ls /var/log/messages 2 > lserr.txt命令,将标准错误信息重定向到文件lserr.txt中。

◆执行ls /var/log/messgaes > /dev/null 2 > /dev/null命令,正常输出和错误信息都不显示,将把标准输出和标准错误都重定向到/dev/null。