【发布时间】:2018-06-29 21:05:54
【问题描述】:
我是 C# 新手,我正在尝试创建一个基于 ffmpeg 的工具来转换视频。 作为标题,我做了谷歌搜索并找到了许多杀死 ffmpeg 进程的方法,但就我而言,例如我有 10 个视频,这意味着将一个一个创建 10 个 ffmpeg 进程。如果我在第一个视频期间关闭表单,将在后台依次创建另外 9 个。
有没有什么有效的方法可以阻止ffmpeg创建进程?
【问题讨论】:
我是 C# 新手,我正在尝试创建一个基于 ffmpeg 的工具来转换视频。 作为标题,我做了谷歌搜索并找到了许多杀死 ffmpeg 进程的方法,但就我而言,例如我有 10 个视频,这意味着将一个一个创建 10 个 ffmpeg 进程。如果我在第一个视频期间关闭表单,将在后台依次创建另外 9 个。
有没有什么有效的方法可以阻止ffmpeg创建进程?
【问题讨论】:
我不太明白你的问题,但我希望这两种方法中的一种可能会有所帮助。
方法一:
Here我找到了如何停止本地机器上所有ffmpeg进程的解决方案。
/// <summary>
/// Stops all ffmpeg processes on the local machine
/// </summary>
private void StopCapturing()
{
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = "taskkill",
Arguments = "/F /IM ffmpeg.exe",
UseShellExecute = false,
CreateNoWindow = true
}
};
process.Start();
}
方法2:
对于您启动的每个 ffmpeg.exe 进程,您可以保存PID。使用 PID,您可以杀死之前启动的每个 ffmpeg.exe 实例。
/// <summary>
/// Starts a new process on the local machine. Returns the PID of the started process
/// </summary>
/// <param name="processName"></param>
/// <param name="arguments"></param>
private int StartProcess(string processName, string arguments)
{
// Initializes the process
Process process = new Process
{
StartInfo = new ProcessStartInfo
{
FileName = processName,
Arguments = arguments,
UseShellExecute = false,
CreateNoWindow = true
}
};
// Starts the process
process.Start();
return process.Id;
}
/// <summary>
/// Kills the process that equals the passed PID
/// </summary>
/// <param name="pid"></param>
private void KillProcess(int pid)
{
Process process = Process.GetProcessById(pid);
process.Kill();
}
【讨论】:
我不确定我是否理解您想要完成的任务,但这是用于在 C# 中终止进程的方法: https://msdn.microsoft.com/en-us/library/system.diagnostics.process.kill(v=vs.110).aspx
【讨论】: