2013-09-25 105 views
2

我有一個unix腳本。它已被其他一些腳本調用,沒有適當的參數。有沒有辦法找到來電者的名字? grep沒有幫助,因爲腳本的名字通過幾個腳本傳遞並動態調用。我想獲得最終調用腳本的腳本?無論如何?獲取腳本的調用者名稱

回答

4

沒有,沒有完全可靠的UNIX進程知道事後什麼進程產生了。當您的腳本(其sh解釋器)爲execve()'d時,其父代可能已終止或用其他程序映像替換自己。

也就是說,您的腳本可以保持冷靜,並根據流程表和自己的環境進行合理的猜測。

ps -o args= $PPID應該可移植地向您顯示腳本父級的命令行。這通常會起作用。

如果$ PPID == 1,則表示您已成爲孤兒,init是您的養父母。 ps -o uid-,gid=,pgid=,tty= $$將顯示您的腳本的用戶和組ID,進程組ID和控制終端。這些通常直接從父項繼承而不需要修改,因此可以稍微挖掘一下,即使父項本身已經終止,也可以幫助找到產生羣組的會話。

1

您可以使用允許跟蹤系統調用的strace實用程序。

這裏是幾個中的一個使用示例上this site

$ strace ls 
execve("/bin/ls", ["ls"], [/* 21 vars */]) = 0 
brk(0)         = 0x8c31000 
access("/etc/ld.so.nohwcap", F_OK)  = -1 ENOENT (No such file or directory) 
mmap2(NULL, 8192, PROT_READ, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb78c7000 
access("/etc/ld.so.preload", R_OK)  = -1 ENOENT (No such file or directory) 
open("/etc/ld.so.cache", O_RDONLY)  = 3 
fstat64(3, {st_mode=S_IFREG|0644, st_size=65354, ...}) = 0 
... 
... 
... 
+2

如果OP知道什麼程序要「strace」,OP就已經知道哪個程序叫做他的腳本。 – pilcrow

相關問題