嗨,我在运行这样的 watch 命令时遇到问题:
watch cat /proc/$(ps ax | grep processname | grep -v grep | awk '{print $1}')/status
该命令在我启动时有效。但是,然后我重新启动正在监视的进程,并且 watch 命令仍然使用旧的进程 ID。我希望它刷新进程 ID 并显示具有相同名称的新进程的状态。该部分$(ps ax | grep processname | grep -v grep | awk '{print $1}')
显然只在开始时运行。每次手表刷新输出时,如何重新评估它?
我不想将 cat 命令放在 bash 脚本中并从 watch 运行该脚本。
这不是一个整洁的方式,但如果你真的不愿意创建一个脚本。你可以试试
eval
。将以下内容另存为,例如
ps-status.sh
在您的 $PATH 中的某个位置,并使其可执行chmod +x
:然后
watch
像这样运行:$pid
应该可能是一个数组,但这需要 bash 而不仅仅是 sh:脚本.sh
解释
每 1 分钟安排一次 crontab
然后使用下面的watch命令查看重启进程名后进程id的区别
你可以单引号
$(...)
来防止它被你运行它的交互式shell扩展。然后你必须通过暂时切换到双引号并返回来逃避你在其中的单引号。所以以下工作:但是,为了了解
watch
这里和一般情况下在做什么,您必须记住,watch
首先将其所有非标志参数连接到一个命令字符串中。它这样做是为了“有帮助”,但我认为它实际上适得其反,因为它掩盖了正在发生的事情。我认为如果你总是只给它一个命令字符串,它会更清晰,更容易理解,在这种情况下,单引号是为了防止你的交互式 shell 扩展其中的任何内容: