我正在尝试学习如何使用“屏幕”工具。
我有另外两个屏幕。
ixnomad@NomadMachine:~$ screen -ls
There are screens on:
1037111.SYS_INFO (06/03/22 17:09:38) (Detached)
1037094.CHECK_CONNECTION (06/03/22 17:08:40) (Detached)
2 Sockets in /run/screen/S-ixnomad.
然后我试图关闭它们(我不想再打开它们)
ixnomad@NomadMachine:~$ kill -9 1037111
但它实际上并没有消失,Linux 说它可能(??)死了,我应该“擦除”它。
ixnomad@NomadMachine:~$ screen -ls
There are screens on:
1037094.CHECK_CONNECTION (06/03/22 17:08:39) (Detached)
1037111.SYS_INFO (06/03/22 13:28:42) (Dead ???)
Remove dead screens with 'screen -wipe'.
2 Sockets in /run/screen/S-ixnomad.
我做错了什么?我不知道如何关闭屏幕而不进入它,关闭其中正在运行的进程,输入“exit”等。是否有任何命令可以关闭它?类似
screen -close(??) 1037111
答案1
此问题源于使用-9
( SIGKILL
) 而不是更“礼貌”的信号(如 )来终止 screen SIGTERM
, SIGKILL
后者会告诉内核从其表中删除该进程,这不会给进程时间进行自我清理。大多数其他信号都会发送给进程本身,因此进程有机会妥善处理。
(简短的讨论:)一开始就使用 是个坏习惯kill -9 ...
;专家建议先尝试不使用信号(默认为SIGTERM
)。如果这不起作用,则意味着该过程不可中断或故意忽略该信号。只有这样你才应该求助于SIGKILL
。
您可能无论如何都希望终止 screen 的子进程。当您这样做时,screen 会收到其终止的通知并干净地退出。这就是kill -S [session] -X quit
Esther 在评论中提到的命令所做的。
或者,正如上面提到的,如果您最终遇到死屏会话,screen -wipe
则告诉协调屏幕进程将其清理。