linux - Linux 中的并发

标签 linux shell embedded-linux

我正在尝试编写一个小的 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/

相关文章:

linux - 嵌入式 Linux 上的 SD 卡损坏

linux - 我在哪里可以找到 vim 增强的资源?

linux - 无法使用 Flash Media Live Encoder 连接到 Linux VPS CentOS 服务器上的 Flash Media 服务器

c - sched.h 中 thread_group 列表的元素类型是什么?

c++ - 为了准确地对其进行基准测试,我应该使一个大函数成为原子吗?

java - 在 Android 上通过 java 代码运行 Shell 命令?

c++ 17 filesystem::remove_all 带通配符路径

bash - 将数字作为命令行参数并打印计数

mysql - select into变量或者在shell脚本中实现mysql的select里面的select

real-time - 使用 Real Time Linux 开始编程的最佳方式是什么?