首页/系统/Linux 运维命令速查/setsid 脱离终端新会话
本包目录(613 条)
文件与目录76 条文本处理77 条网络命令82 条
进程与作业69 条
磁盘与文件系统51 条用户与权限44 条日志与排查40 条systemd 与服务42 条包管理34 条性能与监控48 条定时任务与计划50 条

setsid 脱离终端新会话

在新的会话中运行命令:进程不再属于当前终端的进程组,关闭终端/Ctrl+C 都不会影响到它——比 nohup 更彻底。

Linux 运维命令速查系统更新于 2026-10-12
用途以新会话运行(完全脱离终端)
语法setsid [-f] 命令
对比nohup 忽略 HUP;setsid 换会话,终端信号根本到不了

常用示例

常用示例
setsid ./worker.sh > /var/log/worker.log 2>&1 < /dev/null &
setsid -f ./daemon.sh                # fork 后立即返回
ps -o pid,ppid,pgid,sid,cmd -p $(pgrep -f worker.sh)   # 核对 SID 已变
三重防护组合:nohup + setsid + 重定向,适合没有 systemd 的老环境托管一次性守护。

易错点

  • 脱离会话后管理全靠自己:务必记 PID($!)或写 pidfile,否则杀都找不到
  • 不重定向的话输出仍指向原终端:终端关闭后写日志会出错(EIO)

数据来源与参考

  • man 1 setsid(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌