Skip to the content.

signal 的简单测试

unix signal 的编号和数字直接的关系

kill -L

不过,注意 zsh 中 kill 是默认命令,而且其 kill 不支持 kill -L

# 直接执行
🧀  kill -L
kill: unknown signal: SIGL
kill: type kill -l for a list of signals

martins3@localhost:/usr/share/bcc/tools$ kill -L
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL     5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL   10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM   15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP   20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU   25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO     30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+237) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+742) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+1247) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-857) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-362) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
martins3@localhost:/usr/share/bcc/tools$ which kill
~/.nix-profile/bin/kill
martins3@localhost:/usr/share/bcc/tools$ ~/.nix-profile/bin/kill -L
 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
29 POLL    30 PWR     31 SYS

也就是 bash

bcc

  1. killsnoop 用来监听 kill 系统调用而已

  2. 可以在 send_signal_locked 的这个地方打点,从而知道一个进程是如何被杀掉的。

sudo trace ‘__send_signal_locked (arg1 == 6) “%d”, arg1’

采用 fault injection 的时候,不应该是还没有到达 wbt 吗?

ctrl z 的实现原理

如果执行 sleep 1000 ,ctrl-z 不是通过发送信号, 但是是 continue 是发送信号实现的。

使用 bcc signal 可以容易看到:

[sudo] password for martins3:
TIME      PID      COMM             SIG  TPID     RESULT
08:10:12  16733    zsh              0    83820    -3
08:10:12  16733    zsh              0    83826    0
08:10:12  16733    zsh              0    83826    -3
08:10:12  16733    zsh              0    -83827   0
08:10:12  16733    zsh              0    83829    -3
08:10:12  16733    zsh              0    83845    -3
08:10:13  83854    zsh              0    83855    -3
08:10:14  16733    zsh              0    83858    -3
08:10:14  16733    zsh              18   -82675   0

接受过程:

[root@Node96 10:00:26 701531]$ cat stack
[<0>] do_signal_stop+0xff/0x200
[<0>] get_signal+0x2ae/0x7b0
[<0>] do_signal+0x36/0x610
[<0>] exit_to_usermode_loop+0x71/0xe0
[<0>] prepare_exit_to_usermode+0x90/0xc0
[<0>] retint_user+0x8/0x8
[<0>] 0xffffffffffffffff
[root@Node96 10:00:28 701531]$ timed out waiting for input: auto-logout

发送过程:

@[
        tty_insert_flip_string_and_push_buffer+5
        pty_write+46
        n_tty_write+879
        file_tty_write.isra.0+379
        vfs_write+611
        ksys_write+113
        do_syscall_64+116
        entry_SYSCALL_64_after_hwframe+118
]: 4
@[
        send_signal_locked+5
        group_send_sig_info+241
        __kill_pgrp_info+73
        kill_pgrp+52
        isig+142
        n_tty_receive_signal_char+22
        n_tty_receive_buf_standard+1067
        n_tty_receive_buf_common+263
        tty_port_default_receive_buf+66
        flush_to_ldisc+152
        process_one_work+501
        worker_thread+462
        kthread+268
        ret_from_fork+479
        ret_from_fork_asm+26
]: 1

cat /proc/self/status

SigQ:   0/513462
SigPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000

本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。