我想对 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
我有以下问题:
为什么这会生成一个名为“0”的文件(该文件为空) 我不想创建新文件,只需等待 PID 检查执行即可。
这是一个循环,但如果 2 个命令正确执行,则 1 次 我该如何继续做下去???
为此最好使用“until or while” ???
wait Process Start 或 Begin 的另一个想法 ???
最佳答案
您的代码存在多个问题:
- 如果没有进程,pidof 不会打印 0 或 -1,所以你的逻辑是错误的
- 如果有多个进程,pidof 可以返回多个 pid,这会破坏您的比较
>
必须在[ ]
中进行转义,否则您的代码相当于[ $notepad ] > 0
,指向一个文件。>
甚至不是正确的运算符。您需要-gt
,但如第 1 点和第 2 点所述,您不应该比较数字。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/