我有一个任务,要停止一个正在运行的进程,然后使用之前运行的相同命令再次运行它。
简而言之,我需要更改正在运行的程序的配置并重新启动它以应用更改。
我有一个 program.pid 文件,应用程序在其中存储其 PID。ps
我的设置中的程序没有-p
或类似的标志。
我想要做的是ps | grep
通过我获得的 PID more program.pid
。
问题是如何将第二条命令的结果放入第一条命令中作为第二个参数grep
?
答案1
大多数 shell 支持$(command)
或`command`
使用命令的输出作为变量。至少在 Bash 中,还有一种快捷方式$(<file)
可以读取文件的内容,而无需调用任何子命令。
grep "$(cat program.pid)"
pid=$(cat program.pid)
grep "$pid"
grep "$(< program.pid)"
但是,有一种更直接的方法可以在不使用的情况下读取 Linux 上的命令行ps
- 您可以从中读取/proc/<pid>/cmdline
。虚拟文件包含 NUL 分隔的参数,可以使用例如 Bash 的mapfile
函数读取:
mapfile -d "" args < /proc/$pid/cmdline
现在args
包含单独的命令行参数数组,您可以将其用作:
myprogram "${args[@]}"