Linux下查看进程所执行的命令及其参数
已知进程的 PID,怎么知道他执行的命令及其参数呢?
Linux 下可以执行
cat /proc/[pid]/cmdline
来查看。例如:
$ cat /proc/116860/cmdline /home/xyz/.conda/envs/paddle/bin/python-utools/train.py-cconfigs/ppyolo/ppyolov2_r50vd_dcn_lmdb.yml--eval--use_vdl=1--vdl_log_dir=../../../workspace/paddle-det/ppyolov2_r50vd_dcn_lmdb/vdl
看上去参数全连在一起,没有分开。这其实是 cat 的问题,实际是以 \0 分隔参数的。增加 -v 参数可以看到:
$ cat -v /proc/116860/cmdline /home/xyz/.conda/envs/paddle/bin/python^@-u^@tools/train.py^@-c^@configs/ppyolo/ppyolov2_r50vd_dcn_lmdb.yml^@--eval^@--use_vdl=1^@--vdl_log_dir=../../../workspace/paddle-det/ppyolov2_r50vd_dcn_lmdb/vdl^@
我们可以通过 tr 命令将 \0 替换成空格。如:
$ cat /proc/116860/cmdline | tr '\0' ' ' /home/xyz/.conda/envs/paddle/bin/python -u tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_lmdb.yml --eval --use_vdl=1 --vdl_log_dir=../../../workspace/paddle-det/ppyolov2_r50vd_dcn_lmdb/vdl
也可以通过 strings 命令将参数分隔成单独的行。如:
$ cat /proc/116860/cmdline | strings -1 /home/xyz/.conda/envs/paddle/bin/python -u tools/train.py -c configs/ppyolo/ppyolov2_r50vd_dcn_lmdb.yml --eval --use_vdl=1 --vdl_log_dir=../../../workspace/paddle-det/ppyolov2_r50vd_dcn_lmdb/vdl