你能从进程 ID 获得完整的命令行(包括命令行参数等)吗?

Can you get full command line from process ID (including command line arguments, etc)?

此问题是对此处提出的问题的补充:https://unix.stackexchange.com/questions/163145/how-to-get-whole-command-line-from-a-process。在我的系统上,以下命令会生成 PID(如预期的那样):

CUDA_VISIBLE_DEVICES=4,5 python3 main.py 1> out.txt 2> err.txt &

现在,上面堆栈交换link中的方法提供了很多解决方案。但是,在尝试这些解决方案时,我只收到以下信息:

python3 main.py

有没有办法return整个命令行"CUDA_VISIBLE_DEVICES=4,5python3main.py1>out.txt2>err.txt &", 而不仅仅是部分 "python3 main.py"?

没有

假设您在 Linux 系统上,您可以找到各个位,但不能将它们放在一起。

还假设进程的 PID 在 $pid

CUDA_VISIBLE_DEVICES=4,5 变量被添加到 python 命令的 environment 中。您可以在 /proc/$pid/environ 中找到它,但您无法分辨哪些变量是在命令行中指定的:用户可能已经编写了

export CUDA_VISIBLE_DEVICES=4,5 
python3 main.py 1> out.txt 2> err.txt &

文件重定向在 /proc/$pid/fd:

中可用
  • /proc/$pid/fd/1 是一个符号 link 到 out.txt
  • /proc/$pid/fd/2 是一个符号 link 到 err.txt

我不知道如何判断一个进程是否在后台 运行。


因为您只对环境感兴趣:bash

declare -A environ
while IFS='=' read -r -d '' var value; do
    environ["$var"]="$value"
done < /proc/$pid/environ

echo "process has CUDA_VISIBLE_DEVICE value ${environ[CUDA_VISIBLE_DEVICE]}"