2013-09-25 68 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

相关问题