Linux 上启动一个程序, 我们可能经常通过前台启动, 但是前台启动之后, 终端被占用, 不能同时开展其他工作, 因此就希望将程序变成后台运行,接下来我们介绍下, 类似场景的任务控制.

任务控制实际是Shell程序提供的功能,使用更多的是bash/sh,当然还有其他Shell程序,比如tcshkshcsh等, 对任务管理功能各个实现都大致类似, 这里我们主要介绍接触最多的 bash Shell。

  • cmd & 让程序后台运行
  • Ctrl + c 关闭当前前台运行程序(一般是发送SIGINT给程序处理)
  • Ctrl + z 终端当前前台运行程序(一般是发送SIGTSTP给程序处理)
  • jobs 查看所有后台运行程序
  • bg %number 将程序切换到后台运行
  • fg %number 将后台运行程序切换到前台运行
  • disown %number 将任务从当前的任务表中移除,移除后程序依然在后端运行,只是不被当前会话管理。

发送给进程的数值信号,一般用于程序上下文触发某些动作,例如中止,重载等等,更多信号的具体定义, 可以参见 man kill

另外还有一些有用的指令:

  • setsid cmd 在一个新的会话中运行命令, 一些图形程序基本就是使用这种模式启动,在新会话中运行,避免阻塞核心流程。
  • nohup cmd 让程序忽略挂起信号,同时可以将输出重定向到文件, 例如 nohup redis-server redis.conf > /dev/null 2>&1 &

当我们关闭终端会话的时候, 被当前会话管理的程序将被关闭,如果不想对应程序被关闭,可以使用 setsid cmd 让对应程序运行在独立的会话中。
也可以在启动命令的时候, 直接将程序运行在nohup cmd 模式。

【腾讯云】境外1核2G服务器低至2折,半价续费券限量免费领取!
https://cloud.tencent.com/act/cps/redirect?redirect=1068&cps_key=e4b50f6c64a4480367f8a8d16fd07c5a&from=console

标签: 任务管理, bg, fg

添加新评论