程序集中的hlt指令可以在停止处理器时关闭计算机吗?如果可以用我所说的来完成,这是正确的方法吗?
可以关机吗?
start:
xor ax, ax; ;clear ax
mov bx, ax; ;clear bx
cli ;stop all interrupts
hlt ;halt the cpu
Run Code Online (Sandbox Code Playgroud)
如果这不是可行的方法,如果这不会关闭系统,请告诉我正确的方法.
我已经慢慢地奋斗到我在Heroku上有一个正在运行的Grails应用程序的地步.我现在要睡觉,所以我想把它关闭,所以我不会继续用掉我的Dyno的750个免费小时.这可能很明显但我找不到如何关闭我的Heroku网络服务器并在早上再次重新启动它.
我在Java中有一个相当复杂的关闭 - 有很多清理工作要做.特别是我试图找出如何从关闭钩子线程错误处理.我的代码目前包括:
try {
return shutdownPromise = doShutdown();
}
catch (Throwable exc) {
logger.error("An exception was thrown while shutting down the application.", exc);
System.exit(1);
return null;
}
Run Code Online (Sandbox Code Playgroud)
当我最初写这篇文章时,我基本上认为,关机时的错误应该直接进行exit.但是exit水平不是那么低; 它调用了shutdown hooks.
所以我认为 -
我已将以下代码添加到我的程序中:
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
@Override
public void run() {
System.out.println("exit");
}
}){});
Run Code Online (Sandbox Code Playgroud)
但是,我没有看到这个消息.附加信息:我从Netbeans IDE内部运行程序.
编辑:我忘了添加有一个全局线程,使程序保持活着.我按下Netbeans右下角的[x]来关闭它.
我需要远程关闭并重新启动Linux(Ubuntu)机器而无需登录它们(否则简单的命令可以完成这项工作).这些机器只是便宜的PC,因此没有安装特殊的电源管理硬件(尽管它们可以在局域网上唤醒).是否有某种"电源管理服务器"软件可以安装在这些盒子上,这些软件会监听远程重启/关闭请求并采取相应措施?当然,如果它需要一些身份验证(密码)以响应请求,那将是很好的.
我在linux机器上运行一个应用程序.通过将Windows机器的IP地址作为输入,应用程序必须关闭Windows机器.如果机器运行相同的操作系统很容易,但我很困惑如何在跨操作系统中执行此操作.
在具有大量关闭操作的高度并发程序中,想知道如何在不过早调用System.exit()的情况下设置退出代码?可以设置"当其他一切完成时执行此代码"方法?但我真的只想提前设置退出代码.
我最近一直在尝试使用logback,并且直接从Eclipse内部运行示例.当我这样做时,我注意到 - 即使在我的静态main(String[] args)方法结束后(从我的Java驱动程序类中),应用程序仍然在运行.
我最终确定Logback正在管理自己的线程,即使在我的主应用程序退出之后它仍然存活.我搜索了一些解决方案,并发现这是一种从Java内部显式关闭Logback的方法:
ILoggerFactory factory = LoggerFactory.getILoggerFactory();
if(factory instanceof LoggerContext) {
LoggerContext ctx = (LoggerContext)factory;
ctx.stop();
}
Run Code Online (Sandbox Code Playgroud)
这真的是干净地关闭logback的唯一方法吗?我从来没有遇到过一个日志系统(JUL,JCL,log4j等),它让你明确地关闭它以便优雅地退出你的应用程序......
提前致谢!
更新:这里是logback.xml:
<configuration debug="true" scan="true" scanPeriod="5 minutes">
<appender name="logManager-consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>TRACE</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<smtpHost>my.smtp.host</smtpHost>
<to>john.smith@example.com</to>
<from>no-reply@example.com</from>
<username>my_user</username>
<password>my_password</password>
<subject>%logger{20} …Run Code Online (Sandbox Code Playgroud) 如果我在我的Java程序的运行时添加一个关闭钩子,如下所示:
public class MyShutdownHook implements Runnable
{
@Override
public void run()
{
// Stuff I want executed anytime
// the program, Java, or the OS exits normally,
// crashes, or terminates unexpectedly for any reason.
}
}
// The in another method...
Runtime.getRuntime().addShutdownHook(new MyShutdownHook());
Run Code Online (Sandbox Code Playgroud)
......那么有没有曾经在那里,任何情况下,run()方法将不会执行该程序/ Java的/ OS退出时正常,崩溃或意外终止?如果是这样,什么情况下能够绕过Runtime关闭钩子,为什么?
我有一个简单的java ExecutorService运行一些任务对象(实现Callable).
ExecutorService exec = Executors.newSingleThreadExecutor();
List<CallableTask> tasks = new ArrayList<>();
// ... create some tasks
for (CallableTask task : tasks) {
Future future = exec.submit(task);
result = (String) future.get(timeout, TimeUnit.SECONDS);
// TASKS load some classes and invoke their methods (they may create additional threads)
// ... catch interruptions and timeouts
}
exec.shutdownNow();
Run Code Online (Sandbox Code Playgroud)
在完成所有任务(DONE或TIMEOUT-ed)之后,我尝试关闭执行程序,但它不会停止:exec.isTerminated() = FALSE.
我怀疑某些被执行的任务未正确终止.
是的,我知道执行者的关闭不能保证任何事情:
除尽力尝试停止处理主动执行任务之外,没有任何保证.例如,典型的实现将通过{@link Thread#interrupt}取消,因此任何未能响应中断的任务都可能永远不会终止.
我的问题是,有没有办法确保这些(任务)线程终止?我提出的最佳解决方案是System.exit()在程序结束时调用,但这很简单.