Linux 进程前台后台切换与作业控制

简介: 进程前台/后台切换及作业控制简介:在 Shell 中,启动的程序默认为前台进程,会占用终端直到执行完毕。例如,执行 `./shella.sh` 时,终端会被占用。为避免不便,可将命令放到后台运行,如 `./shella.sh &`,此时终端命令行立即返回,可继续输入其他命令。常用作业控制命令:- `fg %1`:将后台作业切换到前台。- `Ctrl + Z`:暂停前台作业并放到后台。- `bg %1`:让暂停的后台作业继续执行。- `kill %1`:终止后台作业。优先级调整:

进程前台/后台切换

(一)前台进程

当你在 shell 中启动一个程序时,默认它是前台进程。例如,执行 ./shella.sh,这个程序会一直占用终端命令行,直到执行完毕。在前台执行期间,你无法在该终端中输入其他命令,只能等待该程序结束。如果是在本地终端执行一些耗时操作,如大文件解压,或者连接到远程服务器执行脚本时,一旦本地网络中断,前台进程就会结束,这会带来诸多不便,需要重新执行。

示例:

  1. 打开终端。
  2. 执行命令 ./shella.sh
  3. 程序会在前台运行,终端命令行被占用,直到程序执行完毕。

(二)后台进程

通过在命令后面添加 & 符号,可以将命令放到后台执行。例如 ./shella.sh &,这样程序就会在后台运行,终端命令行会立即返回,你可以继续输入其他命令。使用 jobs 命令可以查看后台作业列表,添加 -l 选项时,会显示更详细的信息,如作业号、进程号等。

示例:

  1. 打开终端。
  2. 执行命令 ./shella.sh &
  3. 程序会在后台运行,终端命令行立即返回。
  4. 执行 jobs 命令查看后台作业列表。
  5. 执行 jobs -l 命令查看更详细的后台作业信息。

输出示例:

[1] 12345 Running ./shella.sh &

其中 [1] 表示作业号为 1,12345 是进程号,Running 表示进程正在运行,./shella.sh & 是执行的命令。

作业控制命令

(一)fg 命令

使用 fg 命令可以将某个后台作业切换到前台。如果要将作业号为 1 的作业切换到前台,执行 fg %1。这样,该作业就会在前台继续执行,终端命令行会被该作业占用,直到它执行完毕或者被再次放到后台。

示例:

  1. 执行 jobs 命令查看后台作业列表。
  2. 找到作业号为 1 的作业。
  3. 执行 fg %1 将该作业切换到前台。

(二)Ctrl + Z 组合键

当一个命令正在前台执行时,按下 Ctrl + Z 组合键,可以将其放到后台,并且处于暂停状态。此时,该作业不会继续执行,但也不会占用终端命令行,你可以继续在终端中输入其他命令。

示例:

  1. 执行一个前台命令,例如 ./shella.sh
  2. 按下 Ctrl + Z 组合键。
  3. 该命令会被放到后台并暂停执行。

(三)bg 命令

对于在后台暂停的命令,使用 bg 命令可以让它在后台继续执行。例如,如果作业号为 1 的命令被暂停在后台,执行 bg %1,它就会在后台恢复执行。

示例:

  1. 执行 jobs 命令查看后台作业列表。
  2. 找到作业号为 1 的暂停作业。
  3. 执行 bg %1 让该作业在后台继续执行。

(四)kill 命令

使用 kill 命令可以终止后台运行的程序。例如 kill %1 可以直接终止作业号为 1 的后台进程。需要注意的是,某些进程可能需要使用 kill -9 来强制终止,因为 -9 选项会发送 SIGKILL 信号,该信号不能被进程捕获和忽略。

示例:

  1. 执行 jobs 命令查看后台作业列表。
  2. 找到作业号为 1 的作业。
  3. 执行 kill %1 终止该作业。
  4. 如果需要强制终止,执行 kill -9 %1

进程优先级调整

(一)nice 命令

nice 命令用于在启动进程时设置其优先级。优先级范围通常是从 -20 到 19,默认值是 0。数值越小,优先级越高。普通用户只能设置大于等于 0 的优先级值,而 root 用户可以设置任意优先级值。例如,要以较低优先级(优先级值为 10)启动 ./myscript.sh 脚本,可以执行:

nice -n 10 ./myscript.sh

这样,该脚本在执行时会占用较少的 CPU 时间,适合在后台运行一些对实时性要求不高的任务,以免影响系统中其他重要任务的执行。

示例:

  1. 打开终端。
  2. 执行 nice -n 10 ./myscript.sh
  3. 该脚本会在较低优先级下运行。

(二)renice 命令

renice 命令用于调整正在运行的进程的优先级。例如,要将进程号为 12345 的进程优先级调整为 5,可以执行:

renice -n 5 -p 12345

这样,该进程的优先级就会被修改为 5。通过合理调整进程优先级,可以优化系统资源的分配,确保关键任务能够获得足够的 CPU 时间,同时让一些次要任务在后台以较低优先级运行,提高系统的整体性能和稳定性。

示例:

  1. 执行 ps 命令找到需要调整优先级的进程号,例如 12345。
  2. 执行 renice -n 5 -p 12345
  3. 该进程的优先级会被调整为 5。

优化建议

(一)合理使用后台运行

对于一些耗时较长且不需要实时交互的任务,如批量文件处理、数据备份等,建议使用 & 符号将其放到后台执行。这样可以避免长时间占用终端命令行,提高工作效率。同时,可以利用 jobs 命令随时查看后台作业的状态,根据需要使用 fgbg 等命令进行控制。

示例:

  1. 执行 ./long_running_task.sh & 将耗时任务放到后台运行。
  2. 使用 jobs 命令查看后台作业状态。
  3. 根据需要使用 fgbg 命令控制作业。

(二)防止输出丢失

当需要在后台运行一些会产生输出的命令时,为了避免输出丢失,可以使用 nohup 命令。例如:

nohup ./myscript.sh &

这样,即使退出当前终端,./myscript.sh 脚本仍会在后台运行,并且其输出会被追加到 nohup.out 文件中(默认情况下)。你可以随时查看 nohup.out 文件来获取脚本的输出结果。此外,也可以将输出重定向到指定的文件,例如:

nohup ./myscript.sh > output.log 2>&1 &

2>&1这是错误重定向操作符。

2 代表标准错误(即程序的错误输出内容),&1 代表标准输出。2>&1 的意思是将标准错误重定向到标准输出。由于标准输出已经被重定向到 output.log 文件中,因此标准错误也会被重定向到 output.log 文件中。这样,无论是正常输出还是错误输出,都会被记录到 output.log 文件中。

示例:

  1. 执行 nohup ./myscript.sh &
  2. 退出终端。
  3. 重新打开终端,查看 nohup.outoutput.log 文件获取输出结果。

(三)定期检查与清理后台作业

在长时间使用终端进行多任务操作时,后台可能会积累大量的作业。定期使用 jobs 命令检查后台作业列表,对于已经完成或者不再需要的作业,及时使用 kill 命令进行清理。这有助于释放系统资源,避免后台作业过多导致系统性能下降。

示例:

  1. 执行 jobs 命令查看后台作业列表。
  2. 找到已经完成或不再需要的作业。
  3. 执行 kill %作业号 清理该作业。

目录
相关文章
|
26天前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
6月前
|
API Android开发
判断前台 Activity 是否属于本进程
一种判断前台 Activity 是否属于本进程的方法。
45 10
|
6月前
|
安全 API C#
C# 如何让程序后台进程不被Windows任务管理器强制结束
C# 如何让程序后台进程不被Windows任务管理器强制结束
185 0
|
8月前
|
监控 数据挖掘 Linux
Linux服务器PBS任务队列作业提交脚本的使用方法
【8月更文挑战第21天】在Linux服务器环境中,PBS任务队列能高效管理及调度计算任务。首先需理解基本概念:作业是在服务器上执行的任务;队列则是等待执行任务的列表,具有不同的资源限制与优先级;节点指分配给作业的计算资源。
1283 4
|
8月前
|
监控 Linux 网络安全
在Linux中,什么是cron作业?如何创建一个cron作业?
在Linux中,什么是cron作业?如何创建一个cron作业?
|
8月前
|
Ubuntu Linux Shell
在Linux中,如何定期执行任务,如cron作业设置?
在Linux中,如何定期执行任务,如cron作业设置?
|
23天前
|
Linux
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
125 56
|
8天前
|
Linux 定位技术
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
80 24
|
11天前
|
安全 Shell Linux
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
52 2
Linux系统之su命令的基本使用