Linux 基本工具(任务管理)
在 Linux
上启动一个程序, 我们可能经常通过前台启动, 但是前台启动之后, 终端被占用, 不能同时开展其他工作, 因此就希望将程序变成后台运行,接下来我们介绍下, 类似场景的任务控制.
任务控制实际是Shell程序提供的功能,使用更多的是bash
/sh
,当然还有其他Shell程序,比如tcsh
、ksh
、csh
等, 对任务管理功能各个实现都大致类似, 这里我们主要介绍接触最多的 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
模式。