我想要的是
我正在开发一个小应用程序迫使我只在一天中的某些时间工作 - 我需要一些东西迫使我在晚上停止工作,这样我才能在白天更有效.
OS X中用于在特定时间关闭我的机器的选项太容易取消.然后您可以随时重新登录.
我希望我的应用程序退出所有应用程序,无论他们是否有未保存的工作.
我试过的
我想杀死loginwindow进程,但我读过这会导致数据损坏.
我遇到了shutdown命令 - 我正在使用sudo shutdown -h +0立即关闭.这似乎只是票证,但我担心如果磁盘工具正在进行某种扫描,它可能会导致数据损坏.
关机命令安全吗?
shutdown命令会导致损坏吗?或者使用安全吗?是否有更好的方法可以安全地强制关机?
我有一个嵌入式Jetty 6.1.26实例.我希望通过发送的HTTP GET将其关闭/shutdown.所以我创建了一个JettyShutdownServlet:
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setStatus(202, "Shutting down.");
resp.setContentType("text/plain");
ServletOutputStream os = resp.getOutputStream();
os.println("Shutting down.");
os.close();
resp.flushBuffer();
// Stop the server.
try {
log.info("Shutting down the server...");
server.stop();
} catch (Exception ex) {
log.error("Error when stopping Jetty server: "+ex.getMessage(), ex);
}
Run Code Online (Sandbox Code Playgroud)
但是,当我发送请求时,Jetty不会停止 - 一个线程一直挂org.mortbay.thread.QueuedThreadPool在线上this.wait():
// We are idle
// wait for a dispatched job
synchronized (this)
{
if (_job==null)
this.wait(getMaxIdleTimeMs());
job=_job;
_job=null;
} …Run Code Online (Sandbox Code Playgroud) 我正在EC2现场实例上运行一些应用程序.这些情况可能会被亚马逊杀死,恕不另行通知.
在关闭过程中,进程按某种顺序被终止.我们有监控/恢复程序,根据服务器是关闭还是进程崩溃,应该采取不同的行为.(具体来说,如果服务器实际关闭,我们不想做任何事情)
如何在恢复过程中检测到(如果它仍然存在)由于关闭而导致进程被终止?
(更多系统细节:我在一个不修改外部状态的沙箱中运行未知/不可信/等代码.通常,如果沙盒代码崩溃,则是不受信任代码的作者的错误,我们不会重新运行它.但是如果由于VM故障或失败,沙盒代码终止,我们需要在另一个实例上重新运行.我现在遇到的问题是用户的代码首先被终止,因此监控程序错误地认为崩溃是用户错误.)
所以我试图在set命令下为我的一个if语句添加一个计时器,但我不确定该命令是什么.该脚本将启动并等待30分钟,然后重新启动PC或等待用户输入此时输入或取消它.所以我有两个if语句用于"立即重启"和"取消"设置但现在我需要一个if语句让它从执行我的重启命令之前的三十分钟倒计时.此外,如果有人知道如何在那里添加一个视觉计时器显示剩余多少时间将是一个加号.多谢你们!!!
@Echo off
:START
set /p answer=PC WILL RESTART IN 30 MINUTES, PRESS N TO RESTART NOW OR C TO CANCEL
if "%answer%"=="n" (GOTO Label1)
if "%answer%"=="c" (GOTO Label2)
if "TIMER GOES HERE" "==" (GOTO Label1)
:Label1
shutdown -r -t 60 -f
:Label2
exit
Run Code Online (Sandbox Code Playgroud) 我有一个在关机期间发生的问题.我有一段用C++编写的代码,它包含在.dll中并注入到其他应用程序中.它做了很多事情,包括启动用C#编写的另一个应用程序(服务器).
但是,在启动关闭后,c ++代码启动C#应用程序,因为它已被关闭杀死,因为系统即将关闭而立即崩溃.
然后一个错误框停止关闭,直到用户处理它,这很烦人.有没有办法问操作系统,"嘿,你关闭/重启/退出了吗?" 所以当发生这种情况时,我不会启动应用程序?我想两端的解决方案都没问题.
== 编辑 ==
再澄清一点.作为注入的.dll运行的代码不能假设它注入的应用程序具有任何类型的"窗口".此外,我想要一些我可以查询的东西,而不是我必须听的事件,因为我可能因为时间错过了那个事件.我想知道是否有任何类型的功能可以有效地给我这样的东西
bool IsSystemShutting();
Run Code Online (Sandbox Code Playgroud)
在这方面,C#选项对我和C++选项都有用.但是在.NET框架中,SystemEvents.SessionEnding和SystemEvents.SessionEnded都是事件与属性.我经常会在事件发生后报名参加此次活动,所以这对我来说没有好处.
我知道使用UPS防止服务器立即关闭的重要性.如何在Java应用程序中侦听此类事件?
假设我的UPS将在断电时继续满负荷运行5分钟.他们的服务器将继续运行,但我的应用程序将如何知道是时候开始正常关闭事情了?
这个特定的应用程序主要处理客户端到数据库事务.我主要关注的是在服务器在mysql事务中间立即断电的情况下数据损坏.以下几点是处理电力情况的正确方法吗?
有没有办法在恢复供电时自动重启服务器和应用程序,还是必须手动完成?
我试图阻止我的应用程序被Windows关闭.该应用程序在Windows 8上运行并以XE6编写.我尝试了下面的代码,但它似乎完全被忽略了.为了测试它,我只需通过任务管理器向其发送"结束任务".我需要的是一种方法,让我的应用程序完成它在用户关闭应用程序时所执行的操作,由Windows关闭的任务管理器完成.正常关闭不是问题,这由FormCloseQuery事件处理.但其他两种方法我都无法工作.直到windows XP,通过捕获wm_endsession和wm_queryendsession很容易,从vista开始你需要使用ShutDownBlockReasonCreate,它返回true但似乎无论如何都不起作用.
procedure WMQueryEndSession(var Msg : TWMQueryEndSession); message WM_QUERYENDSESSION;
procedure WMEndSession(var Msg: TWMEndSession); message WM_ENDSESSION;
function ShutdownBlockReasonCreate(hWnd: HWND; Reason: LPCWSTR): Bool; stdcall; external user32;
function ShutdownBlockReasonDestroy(hWnd: HWND): Bool; stdcall; external user32;
procedure TForm1.WMEndSession(var Msg: TWMEndSession);
begin
inherited;
Msg.Result := lresult(False);
ShutdownBlockReasonCreate(Handle, 'please wait while muting...');
Sleep(45000); // do your work here
ShutdownBlockReasonDestroy(Handle);
end;
procedure TForm1.WMQueryEndSession(var Msg: TWMQueryEndSession);
begin
inherited;
Msg.Result := lresult(False);
ShutdownBlockReasonCreate(Handle, 'please wait while muting...');
Sleep(45000); // do your work here
ShutdownBlockReasonDestroy(Handle);
end;
Run Code Online (Sandbox Code Playgroud)
更新
将消息结果更改为true并删除睡眠不会改变任何内容.
procedure TForm1.WMEndSession(var …Run Code Online (Sandbox Code Playgroud) 我在一个单独的线程中的循环中运行acceptTCP侦听器的功能.我想优雅地关闭这个线程,但我看不到任何shutdown可以用来打破接受的机制.
我目前的方法看起来像这样:
use std::net::TcpListener;
use std::thread::spawn;
fn main() {
let tcp_listener = TcpListener::bind((("0.0.0.0"), 0)).unwrap();
let tcp_listener2 = tcp_listener.try_clone().unwrap();
let t = spawn(move || {
loop {
match tcp_listener2.accept() {
Ok(_) => { }
Err(_) => { break; }
}
}
});
drop(tcp_listener);
assert!(t.join().is_ok());
}
Run Code Online (Sandbox Code Playgroud)
但这并不能解决问题(可能是因为我只删除了克隆的副本?).有关如何正确关闭此类线程的任何想法?
(作为参考,我在Rust用户论坛上也问过这个问题)
我有Elixir Task,需要一些时间(10秒).当应用程序升级时,Task.Supervisor尽管有以下情况,此任务仍被终止shutdown: 30000:
=SUPERVISOR REPORT==== 13-Aug-2015::00:03:09 ===
Supervisor: {local,tasks_sup}
Context: child_terminated
Reason: killed
Offender: [{pid,<0.304.0>},
{id,'Elixir.Task.Supervised'},
{mfargs,{'Elixir.Task.Supervised',start_link,undefined}},
{restart_type,temporary},
{shutdown,30000},
{child_type,worker}]
Run Code Online (Sandbox Code Playgroud)
在应用程序升级时,我不知道如何优雅地停止任务(等到任务完成).这是描述我的问题的代码:
defmodule MyApp do
use Application
def start(_, _) do
MyApp.Supervisor.start_link([])
end
end
defmodule MyApp.Supervisor do
use Supervisor
def start_link(state) do
Supervisor.start_link(__MODULE__, state, name: __MODULE__)
end
def init(state) do
children = [
supervisor(Task.Supervisor, [[name: :tasks_sup, shutdown: 30000]]),
worker(MyApp.Worker, [state], restart: :permanent)
]
supervise(children, strategy: :one_for_one)
end
end
defmodule MyApp.Worker do
def start_link(state) do
GenServer.start_link(__MODULE__, state, [name: …Run Code Online (Sandbox Code Playgroud) shutdown当我偶然发现时,我在PowerShell 2.0中的命令后尝试了一些随机参数shutdown -y.它似乎只是注销用户.
如果使用任何其他随机字母(这不是有效参数),则不会发生任何事情.例如:shutdown -b
我的问题是:shutdown -y做些什么特别的事吗?
我找不到任何关于此的文档.