我想对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个命令执行correclty,则为1次 我怎么能继续做下去?
为此,更好地使用“直到或同时”???
等待处理开始或开始的另一个想法???
答案 0 :(得分:16)
您的代码存在多个问题:
>
必须在[ ]
中进行转义,否则您的代码将等同于[ $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
答案 1 :(得分:2)
回答您的第一个问题:'>'不是数学/比较运算符'大于';这是bash让你将输出管道输出到文件(句柄)的方法。
echo "some text" > myfile.txt
将创建名为myfile.txt的文件和'>'将命令的输出发送到该文件。我想你的文件'0'里面有pid,没有别的。
相反,请尝试-gt
(或相关变体:-ge
,-lt
,-le
,-eg
,-ne
)来测试一个值大于(或:大于或等于,小于,小于或等于,等于,不等于),看看是否有帮助。也就是说,
until [ $notepad -gt 0 ]
答案 2 :(得分:1)
如果我理解正确,您要等到记事本发布。那么pidof必须在你的循环中。
while ! pidof notepad.exe >> /dev/null ;
do
sleep 1
done
notepad=$(pidof notepad.exe)
taskset -p 03 $notepad
renice -n 5 -p $notepad
sleep 5
renice -n 0 -p $notepad