6

C言語のシステム関数呼び出しを使用して実行されたバックグラウンドプロセスを強制終了するにはどうすればよいですか。たとえば、「fooprocess」というコンパイル済みアプリケーションがあります。次に、システム関数を使用してバックグラウンドでfooprocessアプリケーションを実行するプログラムを作成します。以下のコードを参照してください。

const char app[] = "fooprocess &";
system(app);

ご覧のとおり、fooprocessアプリケーションをバックグラウンドで実行できるように「&」文字があります。このfooprocessを強制終了するにはどうすればよいですか?

どうもありがとう。

4

3 に答える 3

5

プロセスと対話するには、そのPIDが必要です。それが可能かどうかはわかりませんsystemが、1つの代替手段は、fork+execを使用してプロセスを自分でフォークすることです。

于 2010-12-14T04:50:26.873 に答える
3

system("foo &");後で監視/強制終了できるバックグラウンド プロセスを作成するために使用することは絶対にできません。そのような使用には、巨大な固有のバグがあります。たとえ pid を知っていても、その pid を持つプロセスが最初に実行したプロセスなのか、それとも後で同じ pid を取得したまったく別のプロセスなのかを判断する方法はありません。

この問題 (および考えたくない問題や頭が痛くなる無数の問題) を解決するには、関数について学んだことを忘れて、と、 、またはsystemで子プロセスを作成する必要があります。これにより、直接の子プロセスが作成されます(現在の方法では、プロセスによって孤立して取り込まれる孫が作成されます)、操作を実行するまで、子プロセスのpidはあなたに属し、再利用できません。そのため、シグナルを安全に送信できます。forkexecposix_spawninitwaitwaitpidwait

于 2010-12-14T07:55:40.503 に答える
0


私はこれを使用してあなたの問題を試しました:

ps -axc|grep -i myApp|awk '{print $1}' | tr -d '\n' | xargs -0 kill  

次のように system() に配置できます。

system("ps -axc|grep -i myApp|awk '{print $1}' | tr -d '\n' | xargs -0 kill");

それはうまくいきます。

于 2010-12-14T05:52:19.203 に答える