2016-08-16 15 views
1

私はtorrentファイルをダウンロードするスクリプトを持っています。私はctorrentを使用していますので、pidをkillする必要があります。PHPはプロセスのPIDを取得し、それを殺す

$command = "ctorrent -x \"/var/www/html/torrents/$torrentName\""; 
$output = shell_exec($command); 

これは完璧に動作しますが、私は誰かが次の操作を実行すると、別のstackoverflowの質問に見た:

$command = 'yourcommand' . ' > /dev/null 2>&1 & echo $!; '; 
$pid = exec($command, $output); 
var_dump($pid); 

が、私はこれを使用する場合には、イムとして、私は必要なダウンロードファイルの一部の出力を削除します出力からいくつかのデータを取得します。

どうすれば私のスクリプトを実行してpidを取得できますか?

これは私が達成しようとしているものを最終的に次のとおりです。

if (file_exists("/proc/$pid")){ 
    shell_exec("kill -9 $pid"); 
} 
+1

psツールを使用するか、ロックファイルを使用できます。 ps 'exec(" ps -ef | grep '$ process) "、$ output);' '$ outputを解析します。 – ineersa

+0

' $ process'には何が入っていますか? – Exoon

+0

'ctorrent'と思いますか? – ineersa

答えて

0

これは私が最終的にそれをやった方法です、に感謝を誰もがアドバイスをして、私が気づいたのは、ineersaが言ったことで、最後に. ' & echo $!; ';を置くと、出力テキストの最初にPIDが追加されたので、出力の最初の行をキャプチャしただけですすばらしいです。

$command = "ctorrent -x \"/var/www/html/torrents/$torrentName\""; 
$output = shell_exec($command); 
echo "<pre>"; 
echo $output; 
echo "</pre>"; 

$pid = strtok($output, "\n"); 
echo $pid; 
0

だけpgrepコマンドを試してみてください。

$command = "pgrep programname"; 
$pid = shell_exec($command); 
+2

私は同時に5 torrentsをダウンロードしている場合、それは問題は、どのように私はどちらかを殺すために知っていますか? – Exoon

0

私は、次の解決策を示唆している:あなたが書いたようにあなたがプロセスを殺すことができる

$command = 'ctorrent -x "/var/www/html/torrents/'.$torrentName.'"'; 
$outputfile = "output.out"; 
$pidfile = "pidfile.pid"; 
exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $command, $outputfile, $pidfile)); 
$pid = file_get_contents($pidfile); 
$outout = file_get_contents($outputfile); 

を:

if (file_exists("/proc/$pid")) { 
    shell_exec("kill -9 $pid"); 
} 
関連する問題