ssh 一断后台就挂?nohup、& 和 setsid 的区别
【摘要】 ssh 断线后后台进程退出是 SIGHUP 所致,nohup、setsid、systemd-run 三种逃法各自适用场景。
在服务器上跑个长任务,加了个 & 就断开 ssh,回来发现进程死了——不是玄学,是 SIGHUP。
ssh 会话断开时,系统会给会话里的进程发 SIGHUP 信号,默认行为就是退出。直接加 & 只是把进程放到后台,它还挂在当前会话下面,SIGHUP 照收。
三种逃法:
nohup cmd &——nohup 让进程忽略 SIGHUP,输出默认写到 nohup.out,适合临时跑一下。
setsid cmd——让进程开新会话,彻底脱离当前终端,连控制终端都没有,断线自然牵连不到它。
systemd-run --user cmd——交给 systemd 托管,能用 journalctl 看日志,适合要长期跑、还要留日志的。
下次挂长任务,别光按回车就断线——& 只管放后台,要它活过断线,前面加 nohup 或者 setsid。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)