人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

LINUXコマンドでこんなことできますか?という質問です。解決案に500Pお支払いします。

何らかの処理が「5秒以内」に終了しなかったら、強制終了(kill)みたいなことをしたいです。

例)nkf hoge.txt して5秒以内に完了しないなら、強制終了。

シェルスクリプトを作るのではなく、コマンドで出来たら有り難いです。ワンライナーで。

超適当)nkf hoge.txt >dev/null &|sleep 5|ps nkf|kill nkf みたいな。

●質問者: logihot
●カテゴリ:コンピュータ
✍キーワード:hoge Linux nkf PS txt
○ 状態 :終了
└ 回答数 : 13/16件

▽最新の回答へ

1 ● longicorn
●17ポイント

難しい事を考えずに、普通に5秒後にkillすれば良いだけでは?

5秒後に終了していたらkillしても問題ないですし(killできないだけ)、nkfが5秒後に起動していればそのままkillします。


sh "nkf hoge.txt >dev/null &";sleep 5;kill -kill nkf

自分の環境でテストしたところ、"&;"がまずいのでshから起動しています。


ただし、他のnkfが起動していないことが前提です。

◎質問者からの返答

ありがとうございます。質問に漏れている項目で、実行するコマンドの出力結果は欲しいです。バックグランド実行だと、結果が分からないので、その辺を解決するのは難しいでしょうか。

nkfの例が悪かったのですが、例えば、convert とか find とかの結果を知る処理が5秒後にも走っていたら、結果をかえさずにkillしたいです。

正常なら)結果を返す

不良なら)killしてエラー返す


2 ● dev_zer0
●17ポイント

前提条件

・他にnkfが動いていないこと

・pkillがあること

pkillが無い場合、おとなり質問の

http://q.hatena.ne.jp/1254302163

を参照してください。

nkf hoge.txt > dev/null & ( sleep 5 ; pkill nkf )

バックグラウンドでnkfを走らせ、サブシェルで5秒後にnkfプロセスのkillを試みます

◎質問者からの返答

ありがとうございます。質問に漏れている項目で、実行するコマンドの出力結果は欲しいです。バックグランド実行だと、結果が分からないので、その辺を解決するのは難しいでしょうか。

nkfの例が悪かったのですが、例えば、convert とか find とかの結果を知る処理が5秒後にも走っていたら、結果をかえさずにkillしたいです。

正常なら)結果を返す

不良なら)killしてエラー返す


3 ● daginn
●17ポイント

command >/dev/null & sleep 5; kill $!

commandをバックグラウンドで実行すると、

$!には直前のバックグラウンドジョブ(=command)のPIDが入っているので、それで殺せます。

実行例

$ yes >/dev/null & sleep 5; kill $!

[1] 11112

(5秒経過)

[1]+ Terminated yes > /dev/null

$

◎質問者からの返答

ありがとうございます。質問に漏れている項目で、実行するコマンドの出力結果は欲しいです。バックグランド実行だと、結果が分からないので、その辺を解決するのは難しいでしょうか。

nkfの例が悪かったのですが、例えば、convert とか find とかの結果を知る処理が5秒後にも走っていたら、結果をかえさずにkillしたいです。

正常なら)結果を返す

不良なら)killしてエラー返す


4 ● かほ♪とも★
●17ポイント

すいません

わかりません

◎質問者からの返答

了解です^^


5 ● くない / あしけ
●16ポイント

daginnさんの

command >/dev/null & sleep 5; kill $!

で、">/dev/null"の部分を無くして

command & sleep 5; kill $!

とすればcommandの出力も見られると思います。

これにif文をつけて

command & sleep 5; if kill $!; then echo "failed."; fi

とすれば、killに成功(5秒以内の実行に失敗)した場合の処理を記述できます。

◎質問者からの返答

実現が近くなり、感謝します。また、説明不足が多く申し訳御座いません。

正常な場合は、即時結果が知りたく、異常な場合は、5秒後にエラーを通知したいです。

つまり、正常な場合は、5秒待たずに結果だけを先に出力して、処理を終わらせるか、kill部分をバックグランドに渡したいです。

PHPからコマンドを呼び出すのですが、正常な場合は即時結果が欲しく、異常な場合でも5秒以内には結果が欲しいため、このような質問をさせて頂きました。

頂いた方法ですと、どうしても結果を得るまでに5秒かかってしまい、異常な場合は対応できるのですが、正常パターンで即時結果だけ欲しい部分が何とかならないかと悩んでおります。


1-5件表示/13件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ