crtl +z 挂起后 bg 也只是当前会话"后台", 且会自动刷新显示, 会话中断也还是退出了
能不能中途转成像 nohup 那种真后台执行的?
1
dilu 2021-03-22 20:25:03 +08:00 3
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 20
|
13
saytesnake 2021-03-22 21:40:40 +08:00
11 楼正解,就是一个 job 么。
|
14
CEBBCAT 2021-03-22 21:53:20 +08:00 via Android 7
为什么不读题的人有这么多
|
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 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/ |
21
Tink 2021-03-23 00:00:52 +08:00 via Android
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 后再回来也没有保存啊 |