为了让我的进程保持活力,我过go 在脚本中使用了以下几行代码:

while [ -f $FILENAME ]
do
    echo "Running $BINNAME"
    ./$BINNAME >> $LOGNAME
    sleep 1
done

这对我来说很好.但是,当我试图实现相同的行为但调用两个进程时,我的问题就出现了.换句话说,在需要我的脚本来启动它们和,不断地判断它们是否落下.如果是这样的话,重新启动这一失败的进程.

不可能用pgrepsystemd.

你能给我推荐什么吗?

我try 了以下几种方法:

while [[ -f $FILENAME && -f $FILENAMEPROC ]]
do
    echo "Running $BINNAME + $BINNAMEPROC"
    ./$BINNAME >> $LOGNAME
    ./$BINNAMEPROC >> $LOGNAMEPROC
    sleep 1
done

但显然,脚本等待BINNAME完成,然后启动BINNAMEPROC.这是无效的,因为我需要两个进程同时运行.

同时使用&ps | grep [name]在后台启动也是无效的,因为如果有人添加包含字符串name的新进程,可能会导致误报.

推荐答案

您可以并行运行两个while循环,如下所示:

while : ; do
   echo 1 running
   sleep 3
done &

while : ; do
   echo 2 running
   sleep 3
done

done之后的与号(&;)将第一个循环放入后台,从而允许第二个循环并行进行.

Linux相关问答推荐

在Groff mm中定义页眉不会更改第一页中的页眉

如何在 if ... elif struct 中判断 bash 命令的退出状态?

从 ALSA USB 硬件设备获取 USB 设备文件路径

为什么 `std::this_thread::yield()` 比 `std::this_thread::sleep_for(0s)` 慢 10 倍?

无法放弃所有权限,但可以放弃 CAP_SETUID 权限.

如何在具有多种可能性的linux shell中获取最大值和最小值?

需要获取文件名、行号、模式在文件中的匹配位置

使用正则表达式捕获特定字符串

如何在 linux 上为 JNI 应用程序编译动态库?

如何更改某些文件模式/扩展名的权限?

Linux 应用程序分析

用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

如何将输出从 grep 传送到 cp?

模拟器在内核映像文件中找不到Linux 版本字符串

php.ini 更改,但在 Ubuntu 上无效

谁决定任何数据类型或 struct 的大小(取决于 32 位或 64 位)?

如何在 Linux 中通过控制台输出启动 Tomcat?

Linux AMD64 中如何使用 fs/gs 寄存器?

如何安排 tcpdump 在特定时间段内运行?

linux脚本杀死java进程