我在IDLE中编写了一个程序来标记文本文件,它开始标记349个文本文件!我怎么能阻止它?如何停止正在运行的Python程序?
我最近在一个项目中遇到了这个代码 - 我认为这是错误的:
if(condition)
{
//Whatever...
};
Run Code Online (Sandbox Code Playgroud)
注意闭合支撑后的半冒号.
有谁知道这是什么影响?
我认为它没有任何影响,但会认为它会导致编译器错误.
现在,当用户想要退出我的应用程序时,我会做一些我必须做的事情(即断开与服务器的连接,保存用户数据......)然后我执行以下操作:
这需要几秒钟才能退出,并没有真正的用途(一切都已保存在服务器上,所以我真的不在乎那里发生了什么)
如果我使用它,我立即终止,没有任何我能想到的缺点:
System.Diagnostics.Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)
为什么我不会终止我的进程并让CLR放弃AppDomain?
我知道小心处理你的共享资源(IO文件处理程序等)很重要(所以请不要回答:)),但一旦完成,是否真的有理由干净地退出我的应用程序?
当我点击closeButton时,我想强制停止我的Android应用程序.这是我的代码.
protected void onCreate(Bundle savedInstanceState) {
this.setContentView(R.layout.layoutxml);
this.closeButton = (Button)this.findViewById(R.id.close);
this.closeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
Run Code Online (Sandbox Code Playgroud)
这完成了我的申请.如果我去Settings -> Applications -> Manage applications -> <my application name>
,我可以看到'强制停止'按钮已启用.这是否意味着我的申请没有完全停止?
如何完全完成我的Android应用程序并禁用"设置"中的"强制停止"按钮?从我有限的经验,当一个"异常"(前.NullPointerException异常)的应用程序时,其异常停止,看起来完全完成,而"强制停止"按钮看起来禁用.
Win32 CreateFile
有FILE_FLAG_DELETE_ON_CLOSE
,但我在Linux上.
我想打开一个临时文件,在程序终止时将永远删除该文件.我可以理解,在程序崩溃的情况下,保证这一点可能不切实际,但在任何其他情况下我都希望它能够工作.
我知道RAII.我知道信号.我知道atexit(3)
.我知道我可以打开文件并立即删除它,文件将保持可访问状态,直到文件描述符关闭(甚至处理崩溃).这些似乎都不是一个完整而直接的解决方案:
sigaction(2)
来应对......但是还没有充分考虑这种可能性.atexit(3)
:显然没用,因为它在异常终止期间没有被调用(例如通过信号).unlink(2)
:这是非常好的,除了我需要文件在文件系统中保持可见(否则系统更难监控/故障排除).你会在这做什么?
进一步说明
我在原帖中省略了一个细节,我现在意识到应该包含这个细节.在这种情况下,"文件"不是严格意义上的普通文件,而是POSIX消息队列.我通过创建它mq_open()
.它可以通过mq_close()
或关闭close()
(前者是我系统中后者的别名).它可以通过系统删除mq_unlink()
.所有这些使它类似于常规文件,除了我不能选择文件所在的目录.这使得当前最流行的答案(放置文件/tmp
)变得不可行,因为"文件"是由系统在容量非常有限的虚拟文件系统中创建的.(我已经/dev/mqueue
按照示例安装了虚拟文件系统man mq_overview
).
这也解释了为什么我需要保持名称的名称(使立即取消链接方法不可行):"文件"必须在两个或多个进程之间共享.
我试图检测何时在目录中创建具有给定名称的文件.我正在这样做,感谢看门狗.正确检测到创建但我不知道如何在检测完成后正确终止应用程序.
我的代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import sys
import time
from watchdog.events import FileSystemEventHandler
from watchdog.observers import Observer
logging.basicConfig(level=logging.ERROR)
class MyEventHandler(FileSystemEventHandler):
def __init__(self, observer, filename):
self.observer = observer
self.filename = filename
def on_created(self, event):
print "e=", event
if not event.is_directory and event.src_path.endswith(self.filename):
print "file created"
self.observer.unschedule_all()
self.observer.stop()
def main(argv=None):
path = argv[1]
filename = argv[2]
observer = Observer()
event_handler = MyEventHandler(observer, filename)
observer.schedule(event_handler, path, recursive=False)
observer.start()
observer.join()
return 0
if __name__ == "__main__": …
Run Code Online (Sandbox Code Playgroud) 假设我们定义了一个函数
f : N \to N
f 0 = 0
f (s n) = f (n/2) -- this / operator is implemented as floored division.
Run Code Online (Sandbox Code Playgroud)
Agda将在三文鱼中绘制f,因为它无法判断n/2是否小于n.我不知道怎么告诉Agda的终止检查器.我在标准库中看到它们有一个2的分区和n/2 <n的证明.但是,我仍然没有看到如何让终止检查器意识到已经在较小的子问题上进行了递归.
如何知道在重新启动应用时,用户或iOS是否终止了应用>
"按用户"表示"通过双击主页按钮并按 - 按钮".被用户杀死
'通过iOS'意味着"应用程序成为后台运行状态,iOS终止应用程序10分钟后"
任务:如果父进程终止,则自动终止所有子进程.父进程不仅可以以正确的方式终止,还可以通过在ProcessExplorer中进行终止来终止.我该怎么做?
在С主题建议中使用Job对象的类似问题.如何在C#中使用它而不导出外部DLL?
我试着使用Job Objects.但是这段代码不能正常工作:
var job = PInvoke.CreateJobObject(null, null);
var jobli = new PInvoke.JOBOBJECT_BASIC_LIMIT_INFORMATION();
jobli.LimitFlags = PInvoke.LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_PRIORITY_CLASS
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;
var res = PInvoke.SetInformationJobObject(job, PInvoke.JOBOBJECTINFOCLASS.JobObjectBasicLimitInformation, jobli, 48);
if (!res)
{
int b = PInvoke.GetLastError();
Console.WriteLine("Error " + b);
}
var Prc = Process.Start(...);
PInvoke.AssignProcessToJobObject(job, Prc.Handle);
Run Code Online (Sandbox Code Playgroud)
PInvoke.SetInformationJobObject返回错误.GetLastError返回错误24.但是,PInvoke.AssignProcessToJobObject工作,子进程添加到作业队列(我可以在ProcessExplorer中看到它).但是,因为PInvoke.SetInformationJobObject不起作用 - 当我杀死父节点时,生成的进程保持活动状态.
我在这段代码中有什么不正确的地方?