我有一個unix腳本。它已被其他一些腳本調用,沒有適當的參數。有沒有辦法找到來電者的名字? grep沒有幫助,因爲腳本的名字通過幾個腳本傳遞並動態調用。我想獲得最終調用腳本的腳本?無論如何?獲取腳本的調用者名稱
2
A
回答
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
...
...
...
相關問題
- 1. QScriptEngineAgent - 獲取被調用者名稱
- 2. 如何獲取調用bash腳本的別名名稱
- 3. 如何獲取調用蝙蝠腳本的名稱
- 4. 如何獲取調用python函數的腳本名稱?
- 5. 如何獲取從中調用腳本的頁面名稱
- 6. Powershell - 獲取點源函數中調用腳本的腳本名稱
- 7. 獲取父shell腳本的名稱
- 8. 從另一個腳本調用時獲取當前腳本名稱
- 9. 在Powershell中獲取腳本名稱
- 10. PHP獲取調用者頁面的名稱
- 11. ASP.NET SignalR:如何獲取特定調用者的組名稱?
- 12. 獲取調用者所在隊列的名稱,Twilio
- 13. 使用HTML5獲取iPad的所有者名稱/設備名稱
- 14. 獲取調用從調用的腳本
- 15. 在BASH腳本中獲取git repo名稱和github用戶名?
- 16. 獲取服務器名稱+文件夾名稱(無腳本名稱)
- 17. 獲取用於腳本的當前分支的名稱
- 18. 獲取調用方法的名稱javascript
- 19. JavaScript - 獲取調用函數的名稱
- 20. 獲取調用方法的名稱
- 21. 如何獲取R腳本文件名稱時調用其中的函數?
- 22. 爲Outlook交換用戶獲取VB腳本中userproperties的名稱
- 23. 如何獲取調用者的文件名,方法名稱以python
- 24. 谷歌應用程序腳本獲取用戶ID /名稱
- 25. 獲取調用函數的python腳本的文件名
- 26. zsh:獲取調用函數的腳本的文件名
- 27. 如何獲取調用方法名稱?
- 28. 如何獲取調用方法名稱?
- 29. 獲取列顯示月份名稱谷歌應用腳本
- 30. 如何從簽名文件中獲取簽名者的名稱
如果OP知道什麼程序要「strace」,OP就已經知道哪個程序叫做他的腳本。 – pilcrow