自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux如何找到發(fā)出 kill -9 信號的真兇?

系統(tǒng) Linux
生產(chǎn)環(huán)境遇到一個神奇的問題,某個進(jìn)程運(yùn)行一段時間后,就莫名其妙地被干掉了。初步懷疑是被操作系統(tǒng)OOM killer干掉的,但查看了dmesg日志以及系統(tǒng)內(nèi)存監(jiān)控數(shù)據(jù),發(fā)現(xiàn)內(nèi)存充足也沒有達(dá)到cgroup限制,排除了操作系統(tǒng)OMM killer干的。

 

生產(chǎn)環(huán)境遇到一個神奇的問題,某個進(jìn)程運(yùn)行一段時間后,就莫名其妙地被干掉了。初步懷疑是被操作系統(tǒng)OOM killer干掉的,但查看了dmesg日志以及系統(tǒng)內(nèi)存監(jiān)控數(shù)據(jù),發(fā)現(xiàn)內(nèi)存充足也沒有達(dá)到cgroup限制,排除了操作系統(tǒng)OMM killer干的。

應(yīng)該是被其他進(jìn)程干掉了,但系統(tǒng)里面進(jìn)程這么多,怎么知道是哪個進(jìn)程發(fā)出的kill信號呢?我們知道,sigkill(kill -9)是無法屏蔽并且不允許注冊handler的。

今天給大家介紹一個神器bpftrace,之前介紹BPF入門的文章里面已經(jīng)介紹了通過bpf攔截sys_clone系統(tǒng)調(diào)用了。原理類似,我們可以通過bpftrace攔截kill系統(tǒng)調(diào)用,從而找出殺死進(jìn)程的罪魁禍?zhǔn)住?/p>

腳本非常簡單,如下所示,主要就是在進(jìn)入系統(tǒng)調(diào)用sys_enter_kill注冊 以及 結(jié)束系統(tǒng)調(diào)用sys_exit_kill的時候獲取并打印發(fā)出信號的pid和信號編號。

  1. BEGIN 
  2.     printf("Tracing kill() signals... Hit Ctrl-C to end.\n"); 
  3.     printf("%-9s %-6s %-16s %-4s %-6s %s\n""TIME""PID""COMM""SIG"
  4.         "TPID""RESULT"); 
  5.  
  6. tracepoint:syscalls:sys_enter_kill 
  7.     @tpid[tid] = args->pid; 
  8.     @tsig[tid] = args->sig; 
  9.  
  10. tracepoint:syscalls:sys_exit_kill 
  11. /@tpid[tid]/ 
  12.     time("%H:%M:%S  "); 
  13.     printf("%-6d %-16s %-4d %-6d %d\n", pid, comm, @tsig[tid], @tpid[tid], 
  14.         args->ret); 
  15.     delete(@tpid[tid]); 
  16.     delete(@tsig[tid]); 

我們可以先啟動一個sleep的Demo測試

  1. # sleep 444 

執(zhí)行上面的腳本后,通過 ”kill -9 “殺死上面啟動sleep 任務(wù),可以腳本輸出如下:

  1. TIME      PID    COMM             SIG  TPID   RESULT 
  2. 11:38:43  2837583 bash             9    2837548 0 

其中,TIME代表執(zhí)行時間,PID代表發(fā)出信號的進(jìn)程ID,COMM代表發(fā)出信號進(jìn)程命令行,由于是在bash環(huán)境中執(zhí)行的kill -9 所以這里顯示bash,SIG代表信號編號,本例中是kill -9 信號,TPID是sleep任務(wù)的線程ID,RESULT代表執(zhí)行結(jié)果,0代表成功。”殺手“和”受害者“都已經(jīng)成功顯示。

最終通過上面的腳本找到了系統(tǒng)上面一個自動清理程序,由于使用了通配符導(dǎo)致誤殺的情況。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2015-02-06 10:29:22

2022-04-14 11:17:41

MySQL字符配置

2013-12-03 09:12:37

Linux命令kill命令

2019-10-11 08:00:00

Linux命令最大文件

2014-06-10 10:47:37

2016-08-16 08:26:19

Linuxsignalsigaction

2018-05-28 11:10:08

Linux命令IP地址

2021-05-25 09:30:44

kill -9Linux kill -9 pid

2023-01-05 16:02:40

Linux揚(yáng)聲器

2011-08-12 14:53:56

kill中文man

2018-07-04 09:44:36

mysql10億alter

2021-10-25 12:23:06

Linux僵尸進(jìn)程

2009-10-20 09:19:11

Linux kill命

2021-02-03 10:43:54

Linux系統(tǒng)磁盤

2023-05-25 18:02:47

KVMLinux命令

2012-01-18 10:53:08

iOS小游戲

2010-06-07 12:51:51

Linux 查看進(jìn)程

2018-04-27 14:58:09

Linuxkill命令

2022-11-17 00:04:38

接口性能查詢

2018-01-17 22:17:16

IT架構(gòu)數(shù)據(jù)糟糕架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號