crtl +z 挂起后 bg 也只是当前会话"后台", 且会自动刷新显示, 会话中断也还是退出了
能不能中途转成像 nohup 那种真后台执行的?
|      1dilu      2021-03-22 20:25:03 +08:00  3 1.nohup 2.screen 3.tmux | 
|      2xing2387      2021-03-22 20:28:51 +08:00 xxx > /dev/null & | 
|  |      3sadfQED2      2021-03-22 20:33:02 +08:00 via Android 插眼等答案 | 
|  |      4Osk      2021-03-22 20:34:16 +08:00 via Android disown 试试,zsh 和 bash 支持 | 
|      5PUBG98k      2021-03-22 20:37:48 +08:00 pm2 了解下 | 
|  |      6wusheng0      2021-03-22 20:39:11 +08:00 via Android 楼主的需求是 运行中=>转后台 | 
|      7yitingbai      2021-03-22 20:48:26 +08:00 tmux 你值得拥有 | 
|  |      8flineqaq      2021-03-22 20:53:23 +08:00 纯命令行有点难吧,装个 GNOME/KDE 然后把操作习惯改成 VNC 过去打开终端,需要转后台的时候直接最小化 /doge | 
|      9csdreamdong      2021-03-22 21:13:49 +08:00 (xxx 1>/dev/null 2>&1 &) | 
|  |      10jasonkayzk      2021-03-22 21:28:50 +08:00 xxx 1>/dev/null 2>&1 & [Enter] | 
|      11longbow0      2021-03-22 21:29:50 +08:00  20 | 
|      13saytesnake      2021-03-22 21:40:40 +08:00 11 楼正解,就是一个 job 么。 | 
|  |      14CEBBCAT      2021-03-22 21:53:20 +08:00 via Android  7 为什么不读题的人有这么多 | 
|  |      15z775781      2021-03-22 22:07:43 +08:00 跟你有过同样的需求,然后用 screen 做到了,运行命令前,提前创建 screen  会话 | 
|  |      16skadi      2021-03-22 22:09:31 +08:00 screen | 
|  |      17lance6716      2021-03-22 22:25:56 +08:00 via Android 记得 disown 可以,但是 stdout 会丢 | 
|  |      19Kasumi20      2021-03-22 22:37:33 +08:00 拿到进程号,一切都好办,无非就是脱离终端,脱离进程组之类的 | 
|  |      20Osk      2021-03-22 22:50:43 +08:00 via Android  2 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/ | 
|  |      21Tink PRO disown 是可以 | 
|      22weyou      2021-03-23 00:04:22 +08:00 via Android 如果有 disown 命令: <Ctrl+Z> bg disown 某些系统没装 disown 命令,也可以用 kill: kill -20 <PID> kill -18 <PID> | 
|  |      23psyer      2021-03-23 00:08:55 +08:00 via Android screen 好用,曾经借用这个东东临时展示过网站,hhhh | 
|  |      24pkookp8      2021-03-23 00:23:59 +08:00 话说为什么直接 ```[ ~ ] $ xxx &``` 这样的命令,会话断开后 xxx 进程会退出? init 进程创建 bash 进程,bash 进程创建会话进程,会话进程创建 xxx 进程 当会话进程退出后,xxx 进程不应该由 init 进程接管吗,为什么会退出? | 
|  |      25no1xsyzy      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 | 
|  |      26dzdh      2021-03-23 01:12:04 +08:00 setsid ? systemd / supervisor | 
|  |      2724owls      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) | 
|  |      2824owls      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 ``` | 
|      31augustheart      2021-03-23 07:55:06 +08:00 via Android 最好就是用 screen 解决。其它方法管不了 std 输出 | 
|  |      32Usaki      2021-03-23 08:26:29 +08:00 via Android screen 最优解 | 
|      33gugugagadun      2021-03-23 08:41:25 +08:00 为什么非要中途转,直接写一个 systemd 脚本,type 使用 simple,哪有这么麻烦 | 
|      34Quarter      2021-03-23 09:05:37 +08:00 via iPhone supervisor | 
|  |      35meshell      2021-03-23 09:42:21 +08:00 tmux | 
|      36lanlanye      2021-03-23 10:15:16 +08:00 screen 或者 tmux 应该是目前最好的方式了吧 | 
|      37wmhx      2021-03-23 10:25:34 +08:00 bg 什么的还是 session 的后台, 不是常驻,会随 session 被 quit. 还是要 disown 或 screen 才行, | 
|      38julyclyde      2021-03-23 10:59:41 +08:00 controlling tty 、process group 、session 这几个的后续处理起来比较麻烦 最好是刚开始就搞定 | 
|      39julyclyde      2021-03-23 11:00:55 +08:00 nohup 其实才不是“真”后台呢 | 
|      40gqkkk      2021-03-23 11:03:07 +08:00 screen | 
|  |      41fuis      2021-03-23 11:04:30 +08:00 tmux,运行命令,Ctrl + B 按一下 d 就 detach 了。tmux a 恢复 | 
|  |      42hayhong123      2021-03-23 11:16:06 +08:00 插眼学习下~ | 
|      43iseki      2021-03-23 11:31:27 +08:00 via Android disown 吧,楼主这怕是已经运行起来了才想起来转后台,楼上都不看题的吗 | 
|  |      45jyf007      2021-03-23 19:15:25 +08:00 tmux xxx& exit | 
|  |      46Xhack      2021-03-24 09:55:47 +08:00 xxx > /dev/null & 不是也可以吗??? | 
|  |      48css3 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,不知道大家有没有这个问题 | 
|      50julyclyde      2021-04-01 11:25:33 +08:00 @css3 滚动如果想用的舒服,建议把 screen 替换掉,改用 tmux,然后搭配 iTerm2 的 tmux integration 功能 | 
|  |      52css3 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 后再回来也没有保存啊 |