的信號在哪裏我在solaris服務器上運行了一個shell腳本,它是一個非常複雜的腳本,它會調用一些其他shell或perl腳本,整個執行過程需要很長時間 - 幾個小時。來自
奇怪的是,它總是退出異常。我使用「truss」命令來記錄shell進程的系統調用。它表明原因似乎是信號#15 SIGTERM的到來。但我不知道15號信號從哪裏來?有什麼辦法可以檢測到來自哪個進程的信號?
我的服務器信息:
uname -a
SunOS zsups379 5.10 Generic_144488-07 sun4u sparc SUNW,Sun-Fire-880
桁架輸出的切片(23528的主要流程是,25213是23528的子進程):
25213/2: read(8, "17A6 G8A078A 58E15 P9E 5".., 8192) = 8192
25213/1: Received signal #15, SIGTERM, in lwp_wait() [caught]
23528: Received signal #15, SIGTERM, in waitid() [caught]
25213/2: write(9, " X #85 f @F5 Z88CAFB J\n".., 515) = 515
23528: waitid(P_ALL, 0, 0xFFBFD958, WEXITED|WTRAPPED|WSTOPPED|WCONTINUED) Err#91 ERESTART
25213/1: lwp_wait(2, 0xFFBFD39C) Err#91 ERESTART
25213/1: lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0x0000FFF7) = 0xFFBFFEFF [0x0000FFFF]
23528: lwp_sigmask(SIG_SETMASK, 0x00004000, 0x00000000) = 0xFFBFFEFF [0x0000FFFF]
....
謝謝。這對我來說是一個新的方向,因爲我從未使用過dtrace,所以我會試一試。 – Arkie
事實上,在Solaris系統上,您會發現'/ usr/demo/dtrace/sig.d'作爲DTrace可以執行的操作的示例。只需嘗試一下。 –
@FrankH:我建議(現在已修復)的腳本針對的是user1038919的信號,並會在發生SIGTERM時立即顯示出來。演示之一是對所有信號進行彙總統計,這當然很有趣,但不太適合啓動調查。 – jlliagre