程序从调用程序的地方查找
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')
需求很简单,我想写一个简单的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')