当你在 shell 中启动一个程序时,默认它是前台进程。例如,执行 ./shella.sh
,这个程序会一直占用终端命令行,直到执行完毕。在前台执行期间,你无法在该终端中输入其他命令,只能等待该程序结束。如果是在本地终端执行一些耗时操作,如大文件解压,或者连接到远程服务器执行脚本时,一旦本地网络中断,前台进程就会结束,这会带来诸多不便,需要重新执行。
示例:
./shella.sh
。通过在命令后面添加 &
符号,可以将命令放到后台执行。例如 ./shella.sh &
,这样程序就会在后台运行,终端命令行会立即返回,你可以继续输入其他命令。使用 jobs
命令可以查看后台作业列表,添加 -l
选项时,会显示更详细的信息,如作业号、进程号等。
示例:
./shella.sh &
。jobs
命令查看后台作业列表。jobs -l
命令查看更详细的后台作业信息。输出示例:
[1] 12345 Running ./shella.sh &
其中 [1]
表示作业号为 1,12345
是进程号,Running
表示进程正在运行,./shella.sh &
是执行的命令。
使用 fg
命令可以将某个后台作业切换到前台。如果要将作业号为 1 的作业切换到前台,执行 fg %1
。这样,该作业就会在前台继续执行,终端命令行会被该作业占用,直到它执行完毕或者被再次放到后台。
示例:
jobs
命令查看后台作业列表。fg %1
将该作业切换到前台。当一个命令正在前台执行时,按下 Ctrl + Z
组合键,可以将其放到后台,并且处于暂停状态。此时,该作业不会继续执行,但也不会占用终端命令行,你可以继续在终端中输入其他命令。
示例:
./shella.sh
。Ctrl + Z
组合键。对于在后台暂停的命令,使用 bg
命令可以让它在后台继续执行。例如,如果作业号为 1 的命令被暂停在后台,执行 bg %1
,它就会在后台恢复执行。
示例:
jobs
命令查看后台作业列表。bg %1
让该作业在后台继续执行。使用 kill
命令可以终止后台运行的程序。例如 kill %1
可以直接终止作业号为 1 的后台进程。需要注意的是,某些进程可能需要使用 kill -9
来强制终止,因为 -9
选项会发送 SIGKILL 信号,该信号不能被进程捕获和忽略。
示例:
jobs
命令查看后台作业列表。kill %1
终止该作业。kill -9 %1
。nice
命令用于在启动进程时设置其优先级。优先级范围通常是从 -20 到 19,默认值是 0。数值越小,优先级越高。普通用户只能设置大于等于 0 的优先级值,而 root 用户可以设置任意优先级值。例如,要以较低优先级(优先级值为 10)启动 ./myscript.sh
脚本,可以执行:
nice -n 10 ./myscript.sh
这样,该脚本在执行时会占用较少的 CPU 时间,适合在后台运行一些对实时性要求不高的任务,以免影响系统中其他重要任务的执行。
示例:
nice -n 10 ./myscript.sh
。renice
命令用于调整正在运行的进程的优先级。例如,要将进程号为 12345 的进程优先级调整为 5,可以执行:
renice -n 5 -p 12345
这样,该进程的优先级就会被修改为 5。通过合理调整进程优先级,可以优化系统资源的分配,确保关键任务能够获得足够的 CPU 时间,同时让一些次要任务在后台以较低优先级运行,提高系统的整体性能和稳定性。
示例:
ps
命令找到需要调整优先级的进程号,例如 12345。renice -n 5 -p 12345
。对于一些耗时较长且不需要实时交互的任务,如批量文件处理、数据备份等,建议使用 &
符号将其放到后台执行。这样可以避免长时间占用终端命令行,提高工作效率。同时,可以利用 jobs
命令随时查看后台作业的状态,根据需要使用 fg
、bg
等命令进行控制。
示例:
./long_running_task.sh &
将耗时任务放到后台运行。jobs
命令查看后台作业状态。fg
或 bg
命令控制作业。当需要在后台运行一些会产生输出的命令时,为了避免输出丢失,可以使用 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
文件中。
示例:
nohup ./myscript.sh &
。nohup.out
或 output.log
文件获取输出结果。在长时间使用终端进行多任务操作时,后台可能会积累大量的作业。定期使用 jobs
命令检查后台作业列表,对于已经完成或者不再需要的作业,及时使用 kill
命令进行清理。这有助于释放系统资源,避免后台作业过多导致系统性能下降。
示例:
jobs
命令查看后台作业列表。kill %作业号
清理该作业。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。