私はthis interesting questionを読んでいます。基本的には、子プロセスではないプロセスのPIDに常に到達しないように言われています。それはよく説明され、完璧な意味を持っています。まれな例外にチェックPIDを使用しても構いませんか?
しかし、OPはcronのはされるものではなく、私は非常に異なる状況にいるよ何かをしようとしたとき:
- 私は、プロセスを実行するごとに5分を言うが、一度で100回実行するには5分以上かかります(2つのインスタンスを同時に実行することはできません)。
- 他のプロセスを強制終了または操作したくない場合、プロセスの別のインスタンスが実行中であれば、何もせずにプロセスを終了したいだけです。
この場合、「非子プロセス」のPIDをフェッチすることはできますか?もしそうなら、どうすればいいのですか?
私はif pgrep "myscript"; then ...
などの処理を試みましたが、プロセスは独自のPIDを検出しました。私はより多くのものが見つかるかどうか調べる必要があります。
(最初にリダイレクトされる前に、私はthis questionを読んで、しかし、与えられたソリューションが動作しません:それはそれを使用してプロセスのpidを与えることができます)
EDIT:私は前にそれを言及している必要があり、スクリプトがすでに使用されている場合は、少なくともログファイルに何かを書く必要があります。少なくともdate>>script.log; echo "Script already in use">>script.log"
、私は間違っているかもしれませんが、私は群れがそれを行うことを許可していないと思います。
基本的に、プロセスのインスタンスは常に1つだけであることを確認します。相互排除を実装するためにロックファイルを使用することをお勧めします。ロック関連の議論については、この質問を参照してください:http://stackoverflow.com/questions/41275785/bash-how-to-implement-locking-in-a-multi-process-system/41275952#41275952 – codeforester
@codeforesterスクリプト私はログファイルにいくつかのものを書きます。スクリプトがロックされている場合、私は日付+ "スクリプトはすでに使用中"を書くことができないのですか? –