Pet*_*r.O 6 bash process filename
我知道可执行文件中有空格可能是一种罕见的情况,但它可能会发生。
一个例子可能是最好的解释..
使用标准工具,我想确定拥有(?)当前窗口的可执行文件的位置(在文件系统上)...
xdotoolgetactivewindow ) wmctrl-p -l | sed ... ID .... ps-A ...这里是我遇到问题的地方! Whith ps,当仅列出可执行文件的名称 ( -o ucmd) 时,它会将名称截断为 15 个字符,因此对于任何更长的名称,这排除了此选项。
加宽列 ( -o ucmd:99) 没有任何区别.. 如果pgrep有任何事情要做,它的匹配限制为 15,因为stat(请参阅:info pgrep)。
-A w w当相关名称中包含空格时,“完整”模式(例如)的变体中的列表没有用,因为此名称与其参数被另一个空格分隔!...此外,在“完整”模式下,如果进程已启动通过链接,显示链接的名称,而不是可执行文件的名称。
有没有办法做到这一点(使用标准工具)?......或者空间是这里的表演障碍吗?
所有实用程序都从/proc/$PID任何方式获取它们的信息,但(至少)三个地方/proc/$PID以某种形式包含可执行文件的名称,并且它们报告不同的信息。
Name字段/proc/$PID/status(也可以在 中以更难解析的形式提供/proc/$PID/stat)。这是可执行文件的名称,但被截断为 15 个字符。由于内核执行截断,因此没有选项ps可以提供帮助。这就是ps -o comm(或其同义词ps -o ucmd)显示的内容。/proc/$PID/exename指向可执行文件。您可以使用readlink /proc/$PID/exename. 与 报告的信息不同ps,只有运行该进程的用户才有读取链接目标的权限。pswith ps -o cmd(或其同义词ps -o command)获取所有参数,但参数用空格分隔,因此您无法可靠地判断第零个参数在哪里停止。您可以从 中读取参数/proc/cmdline,它们由空字符分隔:</proc/$PID/cmdline awk -vRS='\0' '{print; exit;}'提取第零个参数。为了完整起见,让我提一下,这些名称可以在进程的生命周期内更改,尽管大多数程序不会这样做:
Name的领域/proc/$PID/status,通过调用prctl与PR_SET_NAME参数。(deleted)到链接目标。argv[0]在 C 中)。进程可以自由修改它。| 归档时间: |
|
| 查看次数: |
4762 次 |
| 最近记录: |