作业控制

在作业停止后, Linux系统会让你选择是终止还是重启。你可以用kill命令终止该进程。要重启停止的进程需要 向其发送一个SIGCONT信号。

启动、停止、终止以及恢复作业的这些功能统称为作业控制。通过作业控制,就能完全控制 shell环境中所有进程的运行方式了。

查看作业

作业控制中的关键命令是jobs命令。jobs命令允许查看shell当前正在处理的作业。

要想查看作业的PID,可以在jobs命令中加入-l选项

$ jobs -l
[1]+ 1897 Stopped 			./test10.sh
[2]- 1917 Running $			./test10.sh > test10.out &

带加号的作业会被当做默认作业。在使用 作业控制命令时,如果未在命令行指定任何作业号,该作业会被当成作业控制命令的操作对象。

当前的默认作业完成处理后,带减号的作业成为下一个默认作业。任何时候都只有一个带加号的作业和一个带减号的作业,不管shell中有多少个正在运行的作业。

重启停止的作业

在bash作业控制中,可以将已停止的作业作为后台进程或前台进程重启。

要以后台模式重启一个作业,可用bg命令加上作业号。

要以前台模式重启作业,可用带有作业号的fg命令。

调整谦让度

在多任务操作系统中(Linux就是),内核负责将CPU时间分配给系统上运行的每个进程。调 度优先级(scheduling priority)是内核分配给进程的CPU时间(相对于其他进程)。在Linux系统 中,由shell启动的所有进程的调度优先级默认都是相同的。

调度优先级是个整数值,从-20(最高优先级)到+19(最低优先级)。默认情况下,bash shell 以优先级0来启动所有进程。

nice命令

nice命令允许你设置命令启动时的调度优先级。要让命令以更低的优先级运行,只要用nice 的-n命令行来指定新的优先级级别。

nice -n 10 ./test4.sh > test4.out &

注意,必须将nice命令和要启动的命令放在同一行中。

nice命令会让脚本以更低的优先级运行,阻止普通系统用户来提高命令的优先级.

nice命令的-n选项并不是必须的,只需要在破折号后面跟上优先级就行了。

renice命令

有时你想改变系统上已运行命令的优先级。这正是renice命令可以做到的。它允许你指定 运行进程的PID来改变它的优先级。

$ renice -n 10 -p 5055

renice命令会自动更新当前运行进程的调度优先级。和nice命令一样,renice命令也有一些限制:

  1. 只能对属于你的进程执行renice;
  2. 只能通过renice降低进程的优先级;
  3. root用户可以通过renice来任意调整进程的优先级。

如果想完全控制运行进程,必须以root账户身份登录或使用sudo命令。