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 %作业号 清理该作业。

目录
相关文章
|
4月前
|
监控 编译器 Python
如何利用Python杀进程并保持驻留后台检测
本教程介绍如何使用Python编写进程监控与杀进程脚本,结合psutil库实现后台驻留、定时检测并强制终止指定进程。内容涵盖基础杀进程、多进程处理、自动退出机制、管理员权限启动及图形界面设计,并提供将脚本打包为exe的方法,适用于需持续清理顽固进程的场景。
|
6月前
|
Web App开发 Linux 程序员
获取和理解Linux进程以及其PID的基础知识。
总的来说,理解Linux进程及其PID需要我们明白,进程就如同汽车,负责执行任务,而PID则是独特的车牌号,为我们提供了管理的便利。知道这个,我们就可以更好地理解和操作Linux系统,甚至通过对进程的有效管理,让系统运行得更加顺畅。
165 16
|
6月前
|
Unix Linux
对于Linux的进程概念以及进程状态的理解和解析
现在,我们已经了解了Linux进程的基础知识和进程状态的理解了。这就像我们理解了城市中行人的行走和行为模式!希望这个形象的例子能帮助我们更好地理解这个重要的概念,并在实际应用中发挥作用。
130 20
|
5月前
|
监控 Shell Linux
Linux进程控制(详细讲解)
进程等待是系统通过调用特定的接口(如waitwaitpid)来实现的。来进行对子进程状态检测与回收的功能。
115 0
|
5月前
|
存储 负载均衡 算法
Linux2.6内核进程调度队列
本篇文章是Linux进程系列中的最后一篇文章,本来是想放在上一篇文章的结尾的,但是想了想还是单独写一篇文章吧,虽然说这部分内容是比较难的,所有一般来说是简单的提及带过的,但是为了让大家对进程有更深的理解与认识,还是看了一些别人的文章,然后学习了学习,然后对此做了总结,尽可能详细的介绍明白。最后推荐一篇文章Linux的进程优先级 NI 和 PR - 简书。
150 0
|
5月前
|
存储 Linux Shell
Linux进程概念-详细版(二)
在Linux进程概念-详细版(一)中我们解释了什么是进程,以及进程的各种状态,已经对进程有了一定的认识,那么这篇文章将会继续补全上篇文章剩余没有说到的,进程优先级,环境变量,程序地址空间,进程地址空间,以及调度队列。
110 0
|
5月前
|
Linux 调度 C语言
Linux进程概念-详细版(一)
子进程与父进程代码共享,其子进程直接用父进程的代码,其自己本身无代码,所以子进程无法改动代码,平时所说的修改是修改的数据。为什么要创建子进程:为了让其父子进程执行不同的代码块。子进程的数据相对于父进程是会进行写时拷贝(COW)。
109 0
|
8月前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
461 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)

热门文章

最新文章