在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)。