您好,我有一个始终在后面运行的监控脚本(带有 winforms gui)。不幸的是,当用户尝试手动关闭计算机时,这会惹恼他们,因为它会引发“此应用程序正在阻止 Windows 关闭”屏幕。
所以我需要一种可靠的方法来在启动关闭时自动关闭脚本。
我尝试订阅SessionEnding - 和 SessionEnded-事件,但它不起作用:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { Exitfunction }
Run Code Online (Sandbox Code Playgroud)
更新:目前是这样的:
$sysevent = [microsoft.win32.systemevents]
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnding" -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Register-ObjectEvent -InputObject $sysevent -EventName "SessionEnded" -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Register-WmiEvent -Class win32_computerShutdownEvent -Action { [Windows.Forms.MessageBox]::Show("Shutdown!", "", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Warning)}
Run Code Online (Sandbox Code Playgroud)
我添加了一个消息框来查看这些事件之一是否确实会触发,但动作脚本块执行的代码可能有错误。没有运气。当我尝试关闭 Windows 8.1 系统时,这些事件都没有发生。当我用 get-job 读取事件时,事件内部没有错误。所有这些状态都处于“未启动”状态。
有什么想法吗?
有没有一种简单的编程方法可以在 Windows 上关闭 NiFi?“手动”方式有效,在命令窗口中运行并按 ctr-c 退出,但我正在尝试自动化测试环境。我可以在 Linux 上使用 nifi.sh 脚本,并且在谷歌搜索时看到了对关闭 bat 脚本的引用,但我使用的是 0.6.1,但它不在该版本中。
我使用 netstat 根据 API 端口号查找 PID,然后终止该进程。但似乎总是有两个进程,一个进程会重新启动另一个进程。所以我用 Bootstrap 端口做了同样的事情,用它来查找进程的 PID,然后也杀死了该进程。但这并不总是可靠的。
场景 我们有一台运行 Ubuntu Server 16.04 和 Docker 的服务器。每天,在一天结束时,我们必须关闭我们的服务器(公司的政策..)并在第二天再次打开它们。
我们通过远程(ssh)向服务器发送关闭标志来关闭服务器。
问题 我相信容器没有正常关闭,因为我注意到像 MySql 这样的容器有时会在恢复模式下启动,我们甚至还会收到一些损坏的文件。
问题 Docker 如何处理来自主机的关闭标志?它会向每个容器发送停止信号,还是会杀死所有容器?
我们如何防止此类问题再次发生?在关闭主机之前,我们是否应该编写一个脚本来向所有容器发送 docker stop 命令?
到目前为止我发现了什么:
*)旁注:虽然我们的容器入口点是[“/opt/tomcat/bin/catalina.sh”,“run”],但在catalina.sh中,java进程是通过bash buildin“exec”命令启动的,因此java进程取代了shell进程,因此成为新的进程id 1。(我可以通过exec进入正在运行的容器并在其中执行“ps aux”来验证这一点。)顺便说一句,我使用的是tomcat 7.0.88。
我发现有关 tomcat 默认情况下正常关闭的声明(http://tomcat.10.x6.nabble.com/Graceful-Shutdown-td5020523.html - “任何正在进行的连接都将完成”),但我所能看到的是从 docker 发送到 java 进程的 SIGTERM 几乎不会停止正在执行的请求。
我编写了一个小 servlet 来测试此行为:
import javax.ws.rs.*;
import javax.ws.rs.core.*;
import javax.ws.rs.core.Response.Status;
@Path("/")
public class SlowServerRes
{
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("test1")
public Response test1(@QueryParam("sleep") final int sleepDurationSec)
{
long received = System.currentTimeMillis();
System.out.println("+++++++++++++++++++++ received request at " + received);
for (int i=1; i <= sleepDurationSec; i++) { …Run Code Online (Sandbox Code Playgroud) 我有一个 Minecraft 基岩版服务器在我们的共享电脑上运行。我想通过 python 与它交互。然而,我遇到的一个问题是我的兄弟有时会重新启动我们的电脑或 Windows 更新。我需要知道如何检测关闭事件并在重新启动之前将关闭命令发送到服务器。我正在使用子流程库。
所以,我正在制作一个机器人,我想知道是否有一种方法可以使用如下命令重新启动它:我确实
p!restart
喜欢一个命令:
p!shutdown
但对于那些来这里寻找关闭命令的人来说,不知道如何重新启动:
async def shutdown(ctx):
id = str(ctx.author.id)
if id == 'your_id_here':
await ctx.send('Shutting down the bot!')
await ctx.bot.logout()
else:
await ctx.send("You dont have sufficient permmisions to perform this action!")```
Run Code Online (Sandbox Code Playgroud) 我正在用 Rust 编写一个带有扭曲的服务。当服务收到 SIGTERM 信号时,我希望它正常关闭,并可能执行一些日志记录或其他工作。
我尝试了很多例子,但没有任何效果。最有希望的似乎来自这个问题,但我似乎无法让它工作,甚至无法编译。我怀疑自从回答这个问题以来事情已经发生了变化。
# Cargo.toml
[dependencies]
tokio = {version = "1", features = ["full"]}
warp = "0.3"
futures = "0.3"
Run Code Online (Sandbox Code Playgroud)
//! main.rs
use warp::Filter;
use futures;
fn main() {
let (tx, rx) = tokio::sync::oneshot::channel();
tokio::run(futures::future::lazy(move || {
let routes = warp::any().map(|| "Hello, World!");
let (_, server) = warp::serve(routes)
.bind_with_graceful_shutdown(([127, 0, 0, 1], 3030), rx);
warp::spawn(server);
}));
println!("Exiting!");
}
Run Code Online (Sandbox Code Playgroud)
//! main.rs
use warp::Filter;
use futures;
fn main() {
let (tx, rx) = tokio::sync::oneshot::channel();
tokio::run(futures::future::lazy(move || { …Run Code Online (Sandbox Code Playgroud) 如何在WPF中覆盖WndProc?当我的窗口关闭时,我尝试检查我正在使用的文件是否被修改,如果是这样,我必须向用户提示"你想保存更改吗?" 消息,然后关闭正在使用的文件和窗口.但是,当我的窗口仍然打开时,我无法处理用户重新启动/关闭/注销时的情况.我无法覆盖WndProc,因为我正在使用WPF进行开发.我也试过使用这个示例MSDN代码.这就是我所做的private void loadedForm(对象发送者,RoutedEventArgs e){
HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(this).Handle);
source.AddHook(new HwndSourceHook(WndProc));
}
private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == WM_QUERYENDSESION.)
{
OnWindowClose(this, new CancelEventArgs())
handled = true;
shutdown = true;
}
return IntPtr.Zero;
}
private void OnWindowClose(object sender, CancelEvetArgs e)
{
if (modified)
{
//show message box
//if result is yes/no
e.cancel = false;
//if cancel
e.cancel = true;
}
}
Run Code Online (Sandbox Code Playgroud)
在XAML文件上,我也使用Closing = "OnWindowClose"但是当我单击是/否时没有任何反应,我的应用程序没有关闭.如果我尝试使用关闭按钮再次关闭它,我收到一个错误?为什么会这样?是因为胡克?WPF中的等价物是什么?
private …Run Code Online (Sandbox Code Playgroud) 有没有办法让计算机上的Python程序在重启时运行?通用解决方案很好,但特别是我在Windows上.
我使用C++编写本地服务应用程序,但我找不到正确的注册预关闭通知的方法(对于Windows之后的操作系统).我相信自Vista之后就添加了SERVICE_CONTROL_PRESHUTDOWN通知,但是当你调用SetServiceStatus时我们需要指定:
dwServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_PRESHUTDOWN;
Run Code Online (Sandbox Code Playgroud)
要么
dwServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_SHUTDOWN | SERVICE_ACCEPT_PRESHUTDOWN;
Run Code Online (Sandbox Code Playgroud) shutdown ×10
python ×3
windows ×3
docker ×2
restart ×2
winapi ×2
apache-nifi ×1
c++ ×1
discord.py ×1
events ×1
java ×1
kubernetes ×1
linux ×1
powershell ×1
rust ×1
rust-tokio ×1
savechanges ×1
service ×1
signals ×1
subprocess ×1
tomcat ×1
warp ×1
wndproc ×1
wpf ×1