在Linux系统中,控制终端(Controlling Terminal)是一个与进程关联的虚拟设备(通常是/dev/tty*
),用于处理用户输入和输出(如键盘、显示器)。它是用户与系统交互的桥梁,尤其在多任务和多用户环境中至关重要。
终端(Terminal)
Ctrl+Alt+F1~F6
切换的文本界面(对应/dev/tty1~tty6
)。/dev/pts/*
。控制终端(Controlling Terminal)
SIGINT
(Ctrl+C)或SIGHUP
(终端断开))。查看进程的控制终端
ps -o tty,cmd -p <PID> # 查看某进程关联的终端
示例输出:
TT CMD
pts/1 bash
查看当前终端设备文件
tty # 返回当前终端的设备路径,如/dev/pts/1
分离进程与终端(守护进程化)
使用nohup
或disown
让进程脱离终端运行:
nohup long_running_command &
终端信号管理
Ctrl+C
:发送SIGINT
到前台进程组。Ctrl+Z
:发送SIGTSTP
暂停进程。kill -HUP <PID>
:模拟终端断开信号。SSH断开后进程退出
/dev/pts/1
),终端关闭时会收到SIGHUP
信号。screen
、tmux
或nohup
隔离终端。后台进程无法读取输入
&
启动)无法从控制终端获取输入(会被暂停)。expect
。终端类型影响程序行为
TERM
(如xterm-256color
)决定终端的显示能力。bash
echo $TERM
会话(Session)与终端的关系
通过setsid
创建新会话并脱离原终端:
setsid new_command
终端与进程组
fg
/bg
切换进程组前后台。控制终端是Linux进程管理与用户交互的核心机制,理解它对调试后台任务、信号处理和会话管理至关重要。如需进一步脱离终端控制,可结合daemon
化工具或终端复用器(如tmux
)。