获取脚本的调用者名称

时间:2013-09-25 11:55:56

标签: unix process

我有一个unix脚本。它被其他一些脚本调用而没有适当的参数。有没有办法找出来电者姓名? grep没有帮助,因为脚本的名称通过多个脚本传递并动态调用。我想获得最终调用我的脚本的脚本?呢?

2 个答案:

答案 0 :(得分:4)

不,UNIX进程没有完全可靠的知道 a posteriori 生成它的过程。当您的脚本(其sh解释器)为execve()时,其父级可能已终止或替换为另一个程序图像。

也就是说,您的脚本可以保持冷静,并根据流程表和自己的环境进行合理的猜测。

ps -o args= $PPID此时应该可以向您显示脚本父级的命令行。这通常会奏效。

如果$ PPID == 1,您已成为孤儿并且init是您的养父母。 ps -o uid-,gid=,pgid=,tty= $$将显示您脚本的用户和组ID,进程组ID和控制终端。这些通常直接从父级继承而无需修改,因此,通过一些挖掘,可以帮助找到产生组的会话,即使父级本身已终止。

答案 1 :(得分: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
...
...
...