KillAPIを使用してプロセスを強制終了する必要があります。そのためには、プロセスのプロセスIDが必要です。私はそれを使用して取得しようとしました:
ret = system("pidof -s raj-srv");
しかし、それは正しい値を返していません。私はこれを使用してプロセスを強制終了したくありません:
ret = system("pkill raj");
プロセスIDを取得するために使用できるAPIはありますか?
system
の返品ステータスを取得しています。それはpidではありません。あなたはこのようなものが欲しいです:
char line[LEN];
FILE *cmd = popen("pidof...", "r");
fgets(line, LEN, cmd);
pid_t pid = strtoul(line, NULL, 10);
pclose(cmd);
その場合、実行中のプロセスのインスタンスが複数存在する可能性があります。pidofは、スペースで区切られたpidの文字列を返します。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
main()
{
char pidline[1024];
char *pid;
int i =0
int pidno[64];
FILE *fp = popen("pidof bash","r");
fgets(pidline,1024,fp);
printf("%s",pidline);
pid = strtok (pidline," ");
while(pid != NULL)
{
pidno[i] = atoi(pid);
printf("%d\n",pidno[i]);
pid = strtok (NULL , " ");
i++;
}
pclose(fp);
}
system()
呼び出しはpidof
の出力を返さず、pidof
の戻りコードを返します。成功した場合はゼロです。
popen()
の代わりにsystem()
を使用してpidof
の出力を消費することもできますが、もっと良い方法(pidof
自体が使用する方法)があると確信しています。 )。おそらくそれは/proc
をさまよっています。
system
関数によって返されるのは、実行されているコマンドからの戻りコードです。
あなたができることはこのようなものです:
system("pidof -s raj-srv > /tmp/pid-of-raj-srv");
そして、ファイルの内容を読み取ります/tmp/pid-of-raj-srv
。
新鮮なスレッドではないことは承知していますが、最近同じ質問に直面したばかりなので、お伺いします。あなたはこれの1つを見ましたか:
sysctl
を使用すると、system( "bla, bla" )
呼び出しを経由せずに、必要な情報を提供できます。最初ははるかに複雑に見えますが、ニーズによっては価値があるかもしれません。