【问题标题】:Can you get full command line from process ID (including command line arguments, etc)?您可以从进程 ID 中获取完整的命令行(包括命令行参数等)吗?
【发布时间】:2021-07-15 14:45:25
【问题描述】:

这个问题是对这里提出的问题的补充: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 &

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

python3 main.py

有没有办法返回整个命令行“CUDA_VISIBLE_DEVICES=4,5 python3 main.py 1> out.txt 2> err.txt &”,而不仅仅是“python3 main.py”部分?

【问题讨论】:

    标签: command-line pid


    【解决方案1】:

    没有。

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

    还假设进程的 PID 在$pid

    CUDA_VISIBLE_DEVICES=4,5 变量被添加到 python 命令的 环境 中。您可以在 /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 是指向 out.txt 的符号链接
    • /proc/$pid/fd/2 是指向 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]}"
    

    【讨论】:

    • 感谢您的快速响应。环境是我需要查看的主要部分,因此您的解决方案有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-13
    • 2022-01-22
    • 2015-06-13
    • 1970-01-01
    • 2018-12-15
    • 2014-01-03
    相关资源
    最近更新 更多