gpt4 book ai didi

linux - 如何让 watch 运行带引号的 bash 脚本

转载 作者:IT王子 更新时间:2023-10-29 01:15:26 25 4
gpt4 key购买 nike

我正在尝试为我机器上运行的 matlab 作业创建一个轻量级内存分析器。有一个或零个 matlab 作业实例,但它的进程 ID 经常变化(因为它实际上被另一个脚本调用)。

下面是我用来记录内存使用情况的 bash 脚本:

#!/bin/bash
pid=`ps aux | grep '[M]ATLAB' | awk '{print $2}'`
if [[ -n $pid ]]
then
\grep VmSize /proc/$pid/status
else
echo "no pid"
fi

当我像这样在 bash 中运行这个脚本时:

./script.sh

它工作正常,给我以下结果:

VmSize:  1289004 kB

这正是我想要的。

现在,我想定期运行它。所以我用 watch 运行它,像这样:

watch ./script.sh

但在这种情况下我只收到:

no pid

请注意,我知道 matlab 作业仍在运行,因为我可以在 top 上用相同的 pid 看到它,此外,我知道每个 matlab 作业需要几个小时才能完成。

我很确定设置 pid 时我的引号有问题。我只是不知道如何解决它。有人知道我做错了什么吗?

附言。在 watch 的手册页中,它说命令由 sh -c 执行。我确实像 sh -c ./script 那样运行了我的脚本,它工作得很好,但是 watch 没有。

最佳答案

为什么不使用带有 sleep 命令的循环呢?

例如:

 #!/bin/bash
pid=`ps aux | grep '[M]ATLAB' | awk '{print $2}'`

while [ "1" ]
do
if [[ -n $pid ]]
then
\grep VmSize /proc/$pid/status
else
echo "no pid"
fi
sleep 10
done

此处脚本休眠(等待)10 秒。您可以设置更改 sleep 命令所需的时间间隔。例如,要使脚本休眠一个小时,请使用 sleep 1h

要退出脚本,请按 Ctrl - C

关于linux - 如何让 watch 运行带引号的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19530785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com