程序从调用程序的地方查找

Program to find from where the program is called

需求很简单,我想写一个简单的hello world程序什么的,让程序知道它的执行父级。例如

因为我来自 Java 背景,所以我将举一个 Java 的例子。我想编写一个运行并输出以下内容的 jar:

运行 来自命令行:

$ java -jar myjar.jar
Hello world called from bash

但是当 运行 来自 myscript.sh:

$ sh myscript.sh
Hello world called from myscript.sh

myscript.sh

#!/bin/bash
#
# runs the jar
java -jar myjar.jar

现在,我对此不了解语言,所以欢迎任何可以帮助我实现这一点的 language/library,唯一的要求是它应该能够从 bash 脚本中调用并且应该识别调用它的脚本。

欢迎每个想法。

您可以通过将 $PPID 变量传递给 ps 来获取调用者和命令及其所有参数作为字符串,例如:

printf "Called from: %s\n" "$(ps -o args= $PPID)"

示例输出:

Called from: /bin/bash ./caller.sh

有关更多输出选项,请参阅 ps man page

您可以像这样在 python 中实现它:

基本上应该是一样的,不管是什么编程语言。您需要获取与其关联的进程的父进程 ID 和名称。如果你使用 Java 程序,我想你也可以在那里实现同样的目标。

我将 python 脚本命名为 test.py,将 shell 脚本命名为 test.sh

test.py

import os
import psutil

ppid = os.getppid()
process_name = psutil.Process(ppid).name()

print("Parent process ID of current process is:", ppid)
print("The parent process name is: ", process_name)

test.sh

#!/bin/bash

python test.py

输出:

python test.py
('Parent process ID of current process is:', 14866)
('The parent process name is: ', 'bash')


./test.sh
('Parent process ID of current process is:', 15382)
('The parent process name is: ', 'test.sh')