次のように異なるパラメータを持つ jar ファイルを実行する必要があります。
#!/bin/bash
cd /Users/hawkarhama/Desktop/RUN
echo $(java -jar IPM.jar 0 20 3 sign.txt)
echo $(java -jar IPM.jar 1 20 3 sign.txt)
echo $(java -jar IPM.jar 2 20 3 sign.txt)
たとえば、2 番目のスクリプトに 5 分以上かかった場合は、それを停止して次のスクリプトに進みます。したがって、実行中の各 jar の最大時間は 5 分です。それより短い時間であれば問題ありませんが、1 つのスクリプトの実行時間がそれより長くなると、スクリプトは次のスクリプトに進む必要があります。
答え1
これは bash 4 以降で動作するはずです:
#!/bin/bash
cd /Users/hawkarhama/Desktop/RUN
( cmdpid=$BASHPID; (sleep 300; kill $cmdpid ) & exec java -jar IPM.jar 0 20 3 sign.txt )
( cmdpid=$BASHPID; (sleep 300; kill $cmdpid ) & exec java -jar IPM.jar 1 20 3 sign.txt )
( cmdpid=$BASHPID; (sleep 300; kill $cmdpid ) & exec java -jar IPM.jar 2 20 3 sign.txt )
以前のバージョンの場合:
#!/bin/bash
cd /Users/hawkarhama/Desktop/RUN
bash -c '(sleep 300; kill $$) & exec java -jar IPM.jar 0 20 3 sign.txt'
bash -c '(sleep 300; kill $$) & exec java -jar IPM.jar 1 20 3 sign.txt'
bash -c '(sleep 300; kill $$) & exec java -jar IPM.jar 2 20 3 sign.txt'
純粋なJavaバージョンを少し検索した後、私は見つけたこれ:
ScheduledExecutorService executor = Executors.newScheduledThreadPool(2);
final Future handler = executor.submit(new Callable(){
DoStuffHere();
});
executor.schedule(new Runnable(){
public void run(){
handler.cancel();
}
}, 5*60*1000, TimeUnit.MILLISECONDS);
答え2
システムにtimeout
コマンドがある場合は、次のように使用できるはずです。
timeout 300s java -jar IPM.jar 0 20 3 sign.txt
︙