我需要一个应用程序来快速删除所有已启动的程序,到目前为止,我已经尝试过,但没有一个程序会删除这些进程:
static string[] helpers = new string[] { "/home/user1/server/server.exe", "/home/user1/server/MarginGenerator.exe", "/home/user1/server/nextday/NextDayTicketSystem.exe" };
static string[] helpers_apps = new string[] { "server", "MarginGenerator", "NextDayTicketSystem" };
static void Main(string[] args)
{
foreach(string s in helpers)
{
foreach (var process in Process.GetProcessesByName(s))
{
process.Kill();
Console.WriteLine("Killing: " + s);
}
}
foreach (string s in helpers_apps)
{
foreach (var process in Process.GetProcessesByName(s))
{
process.Kill();
Console.WriteLine("Killing: " + s);
}
}
foreach (string s in helpers_apps)
{
foreach (var process in Process.GetProcessesByName(s))
{
Process[] processlist = Process.GetProcesses();
foreach (Process theprocess in processlist)
{
if (theprocess.ProcessName.StartsWith(s))
theprocess.Kill();
}
}
}
foreach (string s in helpers_apps)
{
Process.GetProcesses().Where(x => x.ProcessName.ToLower()
.StartsWith(s))
.ToList()
.ForEach(x => x.Kill());
Console.WriteLine("Killing: " + s);
}
}
我使用命令启动此应用程序:
sudo/home/user1/server/AppsKiller.exe
最佳答案
建议不要使用Process.Kill()来停止进程。它有效地发送SIGKILL信号,从而不客气地终止进程。通过仅使用进程名的pkill
命令或带有PID(进程标识符)的kill
命令,您将通过发送SIGTERM信号礼貌地要求有问题的进程停止。有关SIGTERM和SIGKILL的更多信息,请参见https://www.gnu.org/software/libc/manual/html_node/Termination-Signals.html。
简而言之,对于您的用例,一个好的选择是执行以下操作。
Process.Start("/bin/bash", " -c 'sudo pkill -f process_name'");
它会很好地要求程序停止。如果流程没有结束,则可以使用:
Process.Kill();