2016-06-26 336 views
0

我使用Process類中的ffmpeg來執行這樣的命令:殺死進程

string command = "/C ffmpeg -re -i test.mp4 -f mpegts udp://127.0.0.1:" + port.Text; 
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
process.StartInfo.Arguments = command; 
process.Start(); 

此碼流視頻到網絡,但我想停止流當我點擊按鈕

我用process.kill(),但即使我關閉應用程序仍然流的過程

我怎樣才能停止後臺進程或發送CTRL + C到它?

回答

1

領先 「/ C」 表示你的cmd.exe通過啓動呢? 在這種情況下,進程對應於cmd,然後啓動ffmpeg。因此殺死cmd不會殺死ffmpeg。

string command = "-re -i test.mp4 -f mpegts udp://127.0.0.1:" + port.Text; 
process.StartInfo.FileName ="ffmpeg"; 
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
process.StartInfo.Arguments = command; 
process.Start(); 

process.Kill();應該工作。

0

我創建了一個殺死ffmpeg進程的方法。

private void KillAllFFMPEG() 
 
{ 
 
    Process killFfmpeg = new Process(); 
 
    ProcessStartInfo taskkillStartInfo = new ProcessStartInfo 
 
    { 
 
    FileName = "taskkill", 
 
     Arguments = "/F /IM ffmpeg.exe", 
 
     UseShellExecute = false, 
 
     CreateNoWindow = true 
 
    }; 
 

 
    killFfmpeg.StartInfo = taskkillStartInfo; 
 
    killFfmpeg.Start(); 
 
}

,無論你想叫它。

更新1

爲了殺死只有一個FFmpeg的過程的情況下,我們需要得到它的PID第一。當您定義您的ffmpeg流程時,請在全局範圍內定義它,並在初始化後使用以下命令獲取PID。

int myProcessId = FfmpegProcess.Id;

然後調用下面

private void KillFFMPEGByPID(int PID) 
 
{ 
 
    Process killFfmpeg = new Process(); 
 
    ProcessStartInfo taskkillStartInfo = new ProcessStartInfo 
 
    { 
 
    FileName = "taskkill", 
 
     Arguments = "/PID " + Convert.ToString(PID) + " /T", 
 
     UseShellExecute = false, 
 
     CreateNoWindow = true 
 
    }; 
 

 
    killFfmpeg.StartInfo = taskkillStartInfo; 
 
    killFfmpeg.Start(); 
 
}

這會殺了只用給定PID的進程。/T標誌在參數結尾處確定整個進程樹將被終止。

乾杯

+0

它的工作原理謝謝,但我怎麼能修改它來通過ID殺死一個進程? –

+0

注意:這將殺死任何ffmpeg.exe,不僅僅是由你開始的那些。以防萬一您同時運行其他工具。 – lexx9999

+0

剛剛更新了我的答案... –