问题描述
我有猫的问题。我想编写与 ps -e 相同的脚本。在 pid.txt 中,我有正在运行的进程的 PID。
ls /proc/ | grep -o "[0-9]" | sort -h > pid.txt
然后我想将 $line 用作每个 PID 的 cmdline 路径的一部分。
cat pid.txt | while read line; do cat /proc/$line/cmdline; done
我也试试 for 循环
for id in 'ls /proc/ | grep -o "[0-9]\+" | sort -h'; do
cat /proc/$id/cmdline;
done
不知道我做错了什么。提前致谢。
解决方法
与运行 cat pid.txt...
命令相比,运行 ls...
命令时您似乎处于不同的当前目录。在同一个终端窗口上运行这两个命令,或使用绝对路径,如 /path/to/pid.txt
除了您的错误之外,您可能想从 grep 命令中删除 -o
,因为它为匹配的 pid 提供了 1 位数字。例如,当 pid 为 423 时,您会得到 2。@Roadowl 也已经指出了这一点。
我认为您所追求的是 - 您的所有方法都存在一些缺陷(或者您真的只想查看具有一位数的 PID 的进程?):
for pid in $(ls /proc/ | grep -E '^[0-9]+$'|sort -h); do cat /proc/${pid}/cmdline; tr '\x00' '\n'; done