OJF*_*ord 24 kill signals process-management background-process
我有点困惑:
% vim tmp
zsh: suspended vim tmp
% kill %1
% jobs
[1] + suspended vim tmp
% kill -SIGINT %1
% jobs
[1] + suspended vim tmp
% kill -INT %1
% jobs
[1] + suspended vim tmp
Run Code Online (Sandbox Code Playgroud)
所以我辞职只是“自己做”,后来想知道为什么:
% fg
[1] - continued vim tmp
Vim: Caught deadly signal TERM
Vim: Finished.
zsh: terminated vim tmp
%
Run Code Online (Sandbox Code Playgroud)
哦!
确实有道理,现在我想起来了,它vim
必须运行才能让它的信号处理程序被告知退出,并这样做。
但显然不是我想要的。
有没有办法在单个命令中“唤醒和退出”?即,内置别名kill %N && fg %N
?
为什么在后台恢复不起作用?如果 Ibg
而不是fg
,Vim 会一直活着直到 I fg
,这打破了我的上述直觉。
PSk*_*cik 26
vi-vi-vi
属于魔鬼。你必须用火杀死它。或者SIGKILL
:
kill -KILL %1
Run Code Online (Sandbox Code Playgroud)
内置的kill
s 足以发送SIGCONT
到挂起的进程,这样你就不必自己做,但是如果进程阻塞了你发送的信号或者处理信号导致进程被挂起,这将无济于事再次(如果后台进程尝试从终端读取,默认情况下,它将被发送SIGTTIN
,如果未处理则暂停进程)。
vim
正在安装信号处理程序(并且可能还设置sigprocmask(2)
)以忽略常见信号,以便任何正在编辑的文件都不会因杂散控制+c 或随机终止信号而丢失。一个更简单的程序很容易被杀死:
% cat busyloop.c
int main(void) {
for (;;) { ; }
return 0;
}
% make busyloop
cc busyloop.c -o busyloop
% ./busyloop
^Z
zsh: suspended ./busyloop
% kill %1
%
[1] + terminated ./busyloop
Run Code Online (Sandbox Code Playgroud)
制作vim
出口(安全),在需要的信号处理vim
,接受TERM
或者USR1
什么的,保存(或丢弃?)任何你到底做需要做缓冲区等vim
这样的出口?
归档时间: |
|
查看次数: |
30699 次 |
最近记录: |