killall
アプリケーションを知っているがPID
実行時にインポートできないので、同様のコマンドで他のアプリケーションを終了したいと思います。
これはCコードで行う必要があります。わかりました。kill()
しかし、必ず必要ですPID
。 killallと同等の他のものはありますか?
答え1
kill(2)
プロセスにシグナルを送信するシステムコールなので、このユーティリティと同等の機能はありませんkillall
。
Cでこれを行う簡単な方法は、killall
system(3)ライブラリ関数またはpopen(3)を使用してCプログラムからそれを呼び出すことです。
あるいは、疑似ファイルシステムのマニュアルページを読み、/proc
コマンド名を検索してpidを直接見つけることもできます。
man 2 kill
man 3 system
man 3 popen
man 5 proc
答え2
タイトルの質問に答えると、この一致を実行できるCライブラリはありません。 libprocpsもこれを行いません。
Killallは簡単なプログラムです:
- 似合うものを探す
- 名前に数字のみを含む/ procのディレクトリを効果的に見つけ、そのディレクトリの下のファイルと一致します。
一般的なので(つまり、ユーザーがどの一致基準を使用するのかは事前に不明であるため)、一致する項目がたくさんあります。何をマッチさせたいかをすでに知っておく必要があります。あなたの質問は実際にはそうではありませんが、名前やコマンドラインのように聞こえます。
私は全体的なアプローチに本当に注意してください。プロセスは実際に自分が連絡している他のプロセスを識別する必要があります。名前は簡単に偽造できるので一致しません。また、同じ名前の2人のユーザー、または2つのシステムがある可能性があることも検討してください。どのプロセスを終了する必要がありますか?
PIDファイルやプログラムの起動時にPIDを記録する他の方法は、どのプロセスについて話しているかを正確に知ることができるので、はるかに良いです(フォークされない限り)。
Richardが上で指摘したように、killallコードはGPL2 +であるため、同じライセンスの下で再利用できます。プロジェクトはgitlabに移行され、現在の場所は次のとおりです。https://gitlab.com/psmisc/psmisc