凝视和杀死循环中的过程

时间:2013-11-05 20:27:00

标签: bash shell scripting

我有一些PDF文件。我想检查他们每个人20秒。我尝试这样做的方式如下:for file in *.pdf; do echo $file; evince $file; sleep 20s; killall evince; done。它显示第一个文件,但在20秒后不会杀死它。这里出了什么问题?

2 个答案:

答案 0 :(得分:2)

您需要异步启动evince以便sleep能够运行:

for file in *.pdf; do
    echo $file;
    evince $file & sleep 20s;
    killall evince;
done

<强>更新

正如所建议的,这更好:

for file in *.pdf; do
   evince "$file" & evince_pid=$!
   sleep 20s
   kill $evince_pid
done

答案 1 :(得分:1)

如果可用,请使用timeout(GNU coreutils的一部分):

for f in *.pdf; do
    echo "$f"
    timeout 20 evince "$file"
done