在阅读有关 linux 的文章时,我得到了:
默认情况下,在脚本中创建的变量仅对当前 shell 可用;子进程(子 shell)将无法访问已设置或修改的值。允许子进程查看这些值需要使用导出命令。
我试图找到有关子外壳的信息,然后遇到了是否有任何命令可以查看进程的工作方式?,我发现 ltrace 可以用于此,当我搜索如何使用ltrace
orstrace
时,我发现这PID
是必需的属性。
现在,如果我想知道的 PID $ cp file1 file2
,我该怎么做??这样我就可以使用ltrace
它了??
当前命令的PID
当您在后台启动命令时,会显示您自己的 shell 中命令的 PID。如果当前命令在前台运行,shell 大部分时间都在等待它完成,我们也必须等待——除非我们想在这个 shell 之外使用一个工具;请参阅下面的选项。
作为示例命令,我将使用它
ping
每 5 秒发送一个请求 10 次:现在,我将使用
&
它在后台运行它:[1] 12238
告诉我们进程有进程id,简称PID 12238 ;而且这是当前在此 shell 中运行的第一个后台作业。示例:跟踪库调用
在同一个终端中,我们得到 的输出
ping
,所以我们最好在另一个终端中运行 ltrace(ping
具有特殊的 root 权限,所以我们需要sudo
弄乱它的内部):这是两次“ping”期间库调用的痕迹。
一般查找正在运行的进程的 PID
由于标题问题不是很具体,这里有一些其他方法可以找到当前正在运行的命令的 PID:
按命令名称搜索进程
pgrep -x cmd
请注意变体pgrep cmd
是错误的:它数学为子字符串通过带参数的命令行搜索
pgrep -f cmdarg
列出属于当前 shell(会话)的进程,如后台进程或 shell 本身
ps -s $$
列出所有进程:“进程状态”
ps aux
以更具交互性的方式列出流程:“流程表”
top
您同时需要的一切:一个进程表,与
ltrace
和集成strace
:htop
它是
top
具有增强的 UI 和可配置性的变体,外加一些额外功能:使用光标线选择一个进程,然后按Lfor
ltrace
或sforstrace
!bash
,dash
(以及许多其他 shell)具有用于作业控制的内置命令。如果您在后台运行命令您可以发现当前 shell 的所有后台命令:
如果您需要其中一个的进程 ID,您可以使用 获取它,上面的作业列表(第一列)中的作业 ID 在
jobs -p %N
哪里。N
还有一个特殊变量$!
,shell 将用最近在后台执行的命令的 PID 代替。有关详细信息和更多选项,请查看手册的相关部分
bash(1)
(直接链接到 HTML 版本中的作业控制部分),dash(1)
或查看您选择的 shell。TLDP 也有一个关于作业控制的重要部分。