inu*_*aze 7 bash loops conditional-statements
我想对Bash说,等待Process Start/Begin.我正在尝试这种方式,例如:
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
Run Code Online (Sandbox Code Playgroud)
我有以下问题:
为什么这会生成一个名为"0"的文件(文件为空)我不想创建一个新文件,只是等待PID检查执行.
这是一个循环,但如果2个命令执行correclty,1次我怎么能继续做?
为此更好地使用"直到或"?
等待过程开始或开始的另一个想法???
tha*_*guy 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
Run Code Online (Sandbox Code Playgroud)
回答你的第一个问题:“>”不是数学/比较运算符“大于”;这是 bash 允许您将输出通过管道传输到文件(句柄)的方式。
echo "some text" > myfile.txt
Run Code Online (Sandbox Code Playgroud)
将创建一个名为 myfile.txt 的文件,并且“>”将命令的输出发送到该文件中。我可以想象你的文件“0”中有 pid,没有其他内容。
相反,请尝试-gt(或相关变体:-ge、-lt、-le、-eg、-ne)测试一个值是否大于(或:分别大于或等于、小于、小于或等于、等于、不等于),看看是否有帮助。那是,
until [ $notepad -gt 0 ]
Run Code Online (Sandbox Code Playgroud)