crtl +z 挂起后 bg 也只是当前会话"后台", 且会自动刷新显示, 会话中断也还是退出了
能不能中途转成像 nohup 那种真后台执行的?
1 dilu 2021-03-22 20:25:03 +08:00 ![]() 1.nohup 2.screen 3.tmux |
2 xing2387 2021-03-22 20:28:51 +08:00 xxx > /dev/null & |
![]() | 3 sadfQED2 2021-03-22 20:33:02 +08:00 via Android 插眼等答案 |
![]() | 4 Osk 2021-03-22 20:34:16 +08:00 via Android disown 试试,zsh 和 bash 支持 |
5 PUBG98k 2021-03-22 20:37:48 +08:00 pm2 了解下 |
![]() | 6 wusheng0 2021-03-22 20:39:11 +08:00 via Android 楼主的需求是 运行中=>转后台 |
7 yitingbai 2021-03-22 20:48:26 +08:00 tmux 你值得拥有 |
![]() | 8 flineqaq 2021-03-22 20:53:23 +08:00 纯命令行有点难吧,装个 GNOME/KDE 然后把操作习惯改成 VNC 过去打开终端,需要转后台的时候直接最小化 /doge |
9 csdreamdong 2021-03-22 21:13:49 +08:00 (xxx 1>/dev/null 2>&1 &) |
![]() | 10 jasonkayzk 2021-03-22 21:28:50 +08:00 xxx 1>/dev/null 2>&1 & [Enter] |
11 longbow0 2021-03-22 21:29:50 +08:00 ![]() |
13 saytesnake 2021-03-22 21:40:40 +08:00 11 楼正解,就是一个 job 么。 |
![]() | 14 CEBBCAT 2021-03-22 21:53:20 +08:00 via Android ![]() 为什么不读题的人有这么多 |
![]() | 15 z775781 2021-03-22 22:07:43 +08:00 跟你有过同样的需求,然后用 screen 做到了,运行命令前,提前创建 screen 会话 |
![]() | 16 skadi 2021-03-22 22:09:31 +08:00 screen |
![]() | 17 lance6716 2021-03-22 22:25:56 +08:00 via Android 记得 disown 可以,但是 stdout 会丢 |
![]() | 19 Kasumi20 2021-03-22 22:37:33 +08:00 拿到进程号,一切都好办,无非就是脱离终端,脱离进程组之类的 |
![]() | 20 Osk 2021-03-22 22:50:43 +08:00 via Android ![]() ping fooo.bar >> test.log Ctrl + Z bg disown 关闭 ssh 会话,若没有 disown, ping 会被杀掉。若执行了 disown, ssh 断开后,ping 的 ppid 会变成 1 (init)。 再次连上一个新的 ssh 会话,tail -f test.log ,ping 仍然正常运行。 要重新连接,可以用 reptyr,不过我没成功。。。 话说,ssh 登陆上去的第一个命令不应该是 screen 吗 /doge/ |
![]() | 21 Tink PRO disown 是可以 |
22 weyou 2021-03-23 00:04:22 +08:00 via Android 如果有 disown 命令: <Ctrl+Z> bg disown 某些系统没装 disown 命令,也可以用 kill: kill -20 <PID> kill -18 <PID> |
![]() | 23 psyer 2021-03-23 00:08:55 +08:00 via Android screen 好用,曾经借用这个东东临时展示过网站,hhhh |
![]() | 24 pkookp8 2021-03-23 00:23:59 +08:00 话说为什么直接 ```[ ~ ] $ xxx &``` 这样的命令,会话断开后 xxx 进程会退出? init 进程创建 bash 进程,bash 进程创建会话进程,会话进程创建 xxx 进程 当会话进程退出后,xxx 进程不应该由 init 进程接管吗,为什么会退出? |
![]() | 25 no1xsyzy 2021-03-23 00:57:01 +08:00 @pkookp8 稍微拿 WSL1/2 都试了下,似乎如果是 session 的根 shell 退出会导致子进程退出。 但比较诡异的地方是,如果先再调用 shell,在内层 shell 中开启了 python3 -m http.server & ,然后把中间层的 shell 给关闭了,那这个 python 进程是 init 子进程,并且正常工作。但是如果这时候再把外层 shell 退出,这个 python 进程还存在,但会 close 一切入站( curl: (52) Empty reply from server )。怀疑是 stopped,但不清楚怎么确认 stopped |
![]() | 26 dzdh 2021-03-23 01:12:04 +08:00 setsid ? systemd / supervisor |
![]() | 27 24owls 2021-03-23 02:28:54 +08:00 nohup 做了两件事,忽略了 SIGHUP,重定向了 stdio,那退出 shell 的时候手动做这两件事就行了 SIGHUP 的话,bash 的 shopt huponexit 默认是 off 的,确保默认值就行了 stdio 的话,可以用 gdb 修改 /proc/PID/fd/{0,1,2},参考 open(2), close(2), dup(2) |
![]() | 28 24owls 2021-03-23 02:33:55 +08:00 gdb 修改 cat stdin/stdout/stderr 的例子 ``` $ cat > /tmp/test-in 1 22 333 $ cat ^Z [1]+ Stopped cat $ jobs -l [1]+ 6138 Stopped cat $ gdb -q (gdb) attach 6138 Attaching to process 6138 [ noise ] (gdb) call (int) close (0) $1 = 0 (gdb) call (int) open ("/tmp/test-in", 0200) $2 = 0 (gdb) call (int) close (1) $3 = 0 (gdb) call (int) open ("/tmp/test-out-err", 0501, 0644) $4 = 1 (gdb) call (int) close (2) $5 = 0 (gdb) call (int) dup (1) $6 = 2 (gdb) detach Detaching from program: /usr/bin/cat, process 6138 [Inferior 1 (process 6138) detached] (gdb) quit $ bg [1]+ cat & $ jobs -l [1]+ 6138 Done cat $ cat /tmp/test-out 1 22 333 ``` |
31 augustheart 2021-03-23 07:55:06 +08:00 via Android 最好就是用 screen 解决。其它方法管不了 std 输出 |
![]() | 32 Usaki 2021-03-23 08:26:29 +08:00 via Android screen 最优解 |
33 gugugagadun 2021-03-23 08:41:25 +08:00 为什么非要中途转,直接写一个 systemd 脚本,type 使用 simple,哪有这么麻烦 |
34 Quarter 2021-03-23 09:05:37 +08:00 via iPhone supervisor |
![]() | 35 meshell 2021-03-23 09:42:21 +08:00 tmux |
36 lanlanye 2021-03-23 10:15:16 +08:00 screen 或者 tmux 应该是目前最好的方式了吧 |
37 wmhx 2021-03-23 10:25:34 +08:00 bg 什么的还是 session 的后台, 不是常驻,会随 session 被 quit. 还是要 disown 或 screen 才行, |
38 julyclyde 2021-03-23 10:59:41 +08:00 controlling tty 、process group 、session 这几个的后续处理起来比较麻烦 最好是刚开始就搞定 |
39 julyclyde 2021-03-23 11:00:55 +08:00 nohup 其实才不是“真”后台呢 |
40 gqkkk 2021-03-23 11:03:07 +08:00 screen |
![]() | 41 fuis 2021-03-23 11:04:30 +08:00 tmux,运行命令,Ctrl + B 按一下 d 就 detach 了。tmux a 恢复 |
![]() | 42 hayhong123 2021-03-23 11:16:06 +08:00 插眼学习下~ |
43 iseki 2021-03-23 11:31:27 +08:00 via Android disown 吧,楼主这怕是已经运行起来了才想起来转后台,楼上都不看题的吗 |
![]() | 45 jyf007 2021-03-23 19:15:25 +08:00 tmux xxx& exit |
![]() | 46 Xhack 2021-03-24 09:55:47 +08:00 xxx > /dev/null & 不是也可以吗??? |
![]() | 48 css3 OP @css3 @dilu @xing2387 @sadfQED2 @Osk @PUBG98k @wusheng0 @yitingbai @flineqaq @csdreamdong @jasonkayzk @longbow0 @saytesnake @CEBBCAT @z775781 @skadi @lance6716 @carlclone @Kasumi20 @Tink @weyou @psyer @pkookp8 @no1xsyzy @dzdh @24owls @mingl0280 @augustheart @Usaki @gugugagadun @Quarter @meshell @lanlanye @wmhx @julyclyde @gqkkk @fuis @hayhong123 @iseki @jyf007 @Xhack 用上 screen 了,真香,但有个别问题,比如 screen 页面鼠标不能滚动,vim 退出后仍保留了记录,我用的终端是 termius,不知道大家有没有这个问题 |
50 julyclyde 2021-04-01 11:25:33 +08:00 @css3 滚动如果想用的舒服,建议把 screen 替换掉,改用 tmux,然后搭配 iTerm2 的 tmux integration 功能 |
![]() | 52 css3 OP @css3 @dilu @xing2387 @sadfQED2 @Osk @PUBG98k @wusheng0 @yitingbai @flineqaq @csdreamdong @jasonkayzk @longbow0 @saytesnake @CEBBCAT @z775781 @skadi @lance6716 @carlclone @Kasumi20 @Tink @weyou @psyer @pkookp8 @no1xsyzy @dzdh @24owls @mingl0280 @augustheart @Usaki @gugugagadun @Quarter @meshell @lanlanye @wmhx @julyclyde @gqkkk @fuis @hayhong123 @iseki @jyf007 @Xhack 请教一下各位,screen 分屏后,怎么保存布局? google 了一下,看着是有现成方法: Save the layout of the panes with: Ctrl+a : and then type layout save name-of-your-layout. After reattaching to the screen session the panes will be restored. https://robertbasic.com/blog/split-screen-panes/#:~:text=To%20start%20a%20new%20command,the%20panes%20will%20be%20restored. ctrl +a 后后面是怎么操作的,看描述是键盘输入,但这输入都跑到 command line 了啊,detach 后再回来也没有保存啊 |