c# - 如何正确杀死Linux C#

标签 c# linux process

我需要一个应用程序来快速终止所有启动的程序,到目前为止,我已经尝试过这个,但没有一个会终止这些进程:

    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();

关于c# - 如何正确杀死Linux C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43139976/

相关文章:

c# - 什么技术可以保护 secret 免受完全信任的用户的侵害?

linux - 现场安全更新嵌入式 Linux 的推荐技术

linux - Bash - 如何归档和压缩子目录中的文件,但只能使用特定的文件名

javascript - 在 VS Code 中调试 Node JS 应用程序时未命中断点

node.js - Nodejs 进程挂起,我该如何调试它或收集转储?

c# - 通过 AsterNET 管理 VoIP 调用

c# - 随机数生成器,在一个范围内选择 3 个,在某些迭代中返回 2 个一组

c++ - 如何在 VC++ 2010 中使用 .dll 文件启动进程

c# - DocumentEditor InsertBefore 似乎无法在文档中找到节点

multithreading - Ocaml : Thread. 延迟未按预期工作