我正在尝试编写一个小的 shell 脚本,让它休眠一段时间,比如 20 秒,然后运行它。现在,如果我打开另一个终端并尝试运行相同的脚本,它不应该运行,因为该进程正在其他地方运行。我该怎么做?
我知道我应该写一些东西,让它进入休眠状态捕获它的 pid 并写一个条件,如果这个 pis 在某处运行,那么不要让它在任何地方运行。但我该怎么做呢?请给个代码。
echo "this is a process"
sleep 60
testfilepid = `ps ax | grep test1.sh | grep -v grep | tr -s " " | cut -f1 -d " "| tail -1`
echo $testfilepid
if [[ $tesfilepid = " " ]]
sh test1.sh
else
echo "this process is already running"
fi
这是我试过的。当我在 2 个窗口中执行此操作时,两个窗口都给我输出这是一个进程。
最佳答案
您可以使用 pgrep
检查您的脚本/进程是否正在运行,并否定输出,这是一个非常基本的示例,可以给您一个想法:
if ! pgrep -f sleep >/dev/null; then echo "will sleep" && sleep 3; fi
注意 !
,pgrep -f sleep
将搜索与完整参数列表匹配的进程。 (您可以根据需要自定义)。因此,如果没有任何内容与您的模式匹配,那么您的脚本将被调用。
关于linux - Linux 中的并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49820098/