killall 中的 signal
killall 中的 signal
Flutter 开发时,会遇到另的任务挂起导致新的 Dart 服务无法启动的问题,提示如下:
Waiting for another flutter command to release the startup lock...
killall 命令
此时可以通过以下命令,将所有当前运行的 Dart 服务先结束掉:
$ killall -9 dart
SIGNAL 参数
这里的 -9
指定的是 killall -SIGNAL
中的 SIGNAL
参数,可用的 SIGNAL 参数可通过 killall -l
列出:
$ killall -l
HUP INT QUIT ILL TRAP ABRT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP
TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH INFO USR1 USR2
可以看到这里列出的是各种信号的名称,每个名称根据其顺序对应了一个数字,所以指定 -SIGNAL
参数时,除了使用数字,也可以直接使用这里列出的名称。
名称和数字的对应关系在这里不直观,可通过 man signal
来查看:
$ man signal
...
No Name Default Action Description
1 SIGHUP terminate process terminal line hangup
2 SIGINT terminate process interrupt program
3 SIGQUIT create core image quit program
4 SIGILL create core image illegal instruction
5 SIGTRAP create core image trace trap
6 SIGABRT create core image abort program (formerly SIGIOT)
7 SIGEMT create core image emulate instruction executed
8 SIGFPE create core image floating-point exception
9 SIGKILL terminate process kill program
10 SIGBUS create core image bus error
11 SIGSEGV create core image segmentation violation
12 SIGSYS create core image non-existent system call invoked
13 SIGPIPE terminate process write on a pipe with no reader
14 SIGALRM terminate process real-time timer expired
15 SIGTERM terminate process software termination signal
16 SIGURG discard signal urgent condition present on socket
17 SIGSTOP stop process stop (cannot be caught or ignored)
18 SIGTSTP stop process stop signal generated from keyboard
19 SIGCONT discard signal continue after stop
20 SIGCHLD discard signal child status has changed
21 SIGTTIN stop process background read attempted from con-
trol terminal
22 SIGTTOU stop process background write attempted to con-
trol terminal
23 SIGIO discard signal I/O is possible on a descriptor (see
fcntl(2))
24 SIGXCPU terminate process cpu time limit exceeded (see
setrlimit(2))
25 SIGXFSZ terminate process file size limit exceeded (see
setrlimit(2))
26 SIGVTALRM terminate process virtual time alarm (see
setitimer(2))
27 SIGPROF terminate process profiling timer alarm (see
setitimer(2))
28 SIGWINCH discard signal Window size change
29 SIGINFO discard signal status request from keyboard
30 SIGUSR1 terminate process User defined signal 1
31 SIGUSR2 terminate process User defined signal 2
...
SIGNAL 的用途
程序被终止时,是可以根据外部传来的信号判断出终止的原因,从而在业务上进行合理的善后工作。结束程序时,默认会发送 SIGTERM
信号,而 killall
时,通过手动指定相应的信号,可以让程序合理的响应。