Bash 等待进程启动

标签 bash loops conditional-statements

我想对 Bash 说,等待流程开始/开始。例如,我正在尝试通过这种方式:

notepad=`pidof notepad.exe`
    until [ $notepad > 0 ]
        do
            taskset -p 03 $notepad
            renice -n 5 -p $notepad
            sleep 5
            renice -n 0 -p $notepad
        done

我有以下问题:

  1. 为什么这会生成一个名为“0”的文件(该文件为空) 我不想创建新文件,只需等待 PID 检查执行即可。

  2. 这是一个循环,但如果 2 个命令正确执行,则 1 次 我该如何继续做下去???

  3. 为此最好使用“until or while” ???

  4. wait Process Start 或 Begin 的另一个想法 ???

最佳答案

您的代码存在多个问题:

  1. 如果没有进程,pidof 不会打印 0 或 -1,所以你的逻辑是错误的
  2. 如果有多个进程,pidof 可以返回多个 pid,这会破坏您的比较
  3. > 必须在 [ ] 中进行转义,否则您的代码相当于 [ $notepad ] > 0,指向一个文件。
  4. > 甚至不是正确的运算符。您需要 -gt,但如第 1 点和第 2 点所述,您不应该比较数字。
  5. until 运行循环直到条件为真。它不会等待条件变为真,然后运行循环。

这是你应该做的:

# Wait for notepad to start
until pids=$(pidof notepad)
do   
    sleep 1
done

# Notepad has now started.

# There could be multiple notepad processes, so loop over the pids
for pid in $pids
do        
    taskset -p 03 $pid
    renice -n 5 -p $pid
    sleep 5
    renice -n 0 -p $pid
done

# The notepad process(es) have now been handled

关于Bash 等待进程启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19326245/

相关文章:

python - 从有条件的列表列表中删除列表

javascript - 如何在循环中处理异步 Node.js

java - 使用java程序进行电子邮件验证

linux - bash + 带有路径中有空格的变量的命令

BASH 脚本暂停/继续脚本中的进程

c - 如何使用 O(N) 空间复杂度在链表中查找循环

c++ - 我可以在C++中扩展条件表达式吗

python - 在 Python 中,我可以在一个条件中处理两个变量吗?

Bash 删除任何不带前导空格的字符

string - 如何在 bash 中找到两个字符串之间的公共(public)字符?