実行中の特定のプロセスが実行されているかどうかを確認しようとしていて、NSTask
を試してみましたが、ps
コマンド:ps: illegal argument: |
をgrepしようとするとエラーが表示されます。プロセスが実行中かどうかを確認するNSTask
おそらくnstaskを使用しようとするのが最善の方法ではありませんか?ここで
は私のコードです:
NSString *process = @"grep \"/usr/sbin/notifyd\"";
NSTask *task;
task = [[NSTask alloc] init];
[task setLaunchPath:@"/bin/ps"];
NSArray *arguments;
arguments = [NSArray arrayWithObjects:@"ax",process,nil]; // works, but returns all processes
// arguments = [NSArray arrayWithObjects:@"ax", @"|", process,nil]; // returns illegal argument
[task setArguments: arguments];
NSPipe *pipe;
pipe = [NSPipe pipe];
[task setStandardOutput: pipe];
NSFileHandle *file;
file = [pipe fileHandleForReading];
[task launch];
NSData *data;
data = [file readDataToEndOfFile];
NSString *string;
string = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog (@"result:\n%@", string);
私は(プロセスがアクティブな場合)プロセスが実行されている場合、私が知っているように1行を返すように探しています。これはMacアプリケーションであり、サンドボックス化されていません。ありがとう..
あなたはパイプTerminal.appのように複数のコマンドをすることはできません。 2番目の 'NSTask'が必要で、最初の結果を標準入力に渡します。 – vadian
@vadian:それは私が思ったものですが、わかりませんでした。しかし、2番目のNSTaskの問題は、決して終わらないということです。最初のタスクの結果をgrepしようとするとハングアップするようです。 nstaskは最善の方法ですか? –
この特定のプロセスが実行されているかどうかを確認するプロセス名のPIDを取得するCの関数( 'sysctl'にあります)があります。 – vadian