C# 收到SIGTERM信号后,是否可以恢复中断的过程?
在下面的程序中,我试图实现的是,当我按下Ctrl+C或给定SIGTERM时,我想将“isEnable”设为false,让while循环最后一次完成代码的执行并优雅地退出程序。 我只能用CancelKeyPress实现这一点,因为传递给这个处理程序的EventArgs具有Cancel属性,我只需要将其设置为true。而且,CancelKeyPress只处理Ctrl+C。但是,当我得到SIGTERM信号时,我想要同样的东西 有人知道在收到SIGTERM信号后是否可以像在CancelKeyPress中一样恢复该过程吗 如果你需要更多的信息来理解我的问题,请告诉我C# 收到SIGTERM信号后,是否可以恢复中断的过程?,c#,.net,event-handling,console-application,C#,.net,Event Handling,Console Application,在下面的程序中,我试图实现的是,当我按下Ctrl+C或给定SIGTERM时,我想将“isEnable”设为false,让while循环最后一次完成代码的执行并优雅地退出程序。 我只能用CancelKeyPress实现这一点,因为传递给这个处理程序的EventArgs具有Cancel属性,我只需要将其设置为true。而且,CancelKeyPress只处理Ctrl+C。但是,当我得到SIGTERM信号时,我想要同样的东西 有人知道在收到SIGTERM信号后是否可以像在CancelKeyPress中
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
bool isEnable = true;
Console.CancelKeyPress += (s, e) =>
{
e.Cancel = true;
isEnable = false; // making while loop false
Console.WriteLine("Inside CancelKeyPress");
};
AppDomain.CurrentDomain.ProcessExit += (s, e) =>
{
isEnable = false; // making while loop false
Console.WriteLine("AppDomain ProcessExit!");
};
while (isEnable)
{
Console.WriteLine("first");
Thread.Sleep(3000);
Console.WriteLine("Second");
Thread.Sleep(3000);
Console.WriteLine("Third");
Thread.Sleep(3000);
Console.WriteLine("Fourth");
Thread.Sleep(3000);
}
Console.WriteLine("Gracefull Shotdown");
}
}
SIGTERM是一种“礼貌”的方式,要求程序优雅地终止
然后,程序可以按其希望的任何方式处理此问题
- 它可以忽略它
- 它可以立即关闭
- 它可以完成当前任务的处理,然后优雅地 关机(断开与数据库的连接,关闭文件等)
- 它可以想等多久就等多久,然后关机
C#以Windows为中心,Windows没有SIGTERM等POSIX信号。Ctrl-C和Ctrl-Break的处理方式大致相似,但仅此而已。我想知道它在Linux主机上运行时是否支持信号+1@ikegami我用dotnetcore编写了这个应用程序,并在linux框中运行了代码,然后给出了“kill-15”。此时,它调用AppDomain.CurrentDomain.ProcessExit并终止应用程序,而不是继续以前的任务。Re“此时它调用AppDomain.CurrentDomain.ProcessExit并终止应用程序”,取消事件(
e.Cancel=true;
)是否会阻止退出?