我有一个脚本尝试使用另一个程序建立数据库连接,程序的超时(2.5分钟)是长的.我想将此功能添加到脚本中.
如果连接需要5秒以上的时间,请终止进程
Else kill sleep/kill进程.
我遇到的问题是bash如何在进程被杀死时报告,这是因为进程只在后台处于同一个shell中.有没有更好的方法来执行此操作或如何使shell为kill命令静音?
DB_CONNECTION_PROGRAM > $CONNECTFILE &
pid=$!
(sleep 5; kill $pid) &
sleep_pid=$!
wait $pid
# If the DB failed to connect after 5 seconds and was killed
status=$? #Kill returns 128+n (fatal error)
if [ $status -gt 128 ]; then
no_connection="ERROR: Timeout while trying to connect to $dbserver"
else # If it connected kill the sleep and any errors collect
kill $sleep_pid
no_connection=`sed -n '/^ERROR:/,$p' $CONNECTFILE`
fi
Run Code Online (Sandbox Code Playgroud) 简单的问题,在BASH我试图读取一个.pid文件来杀死一个进程.如何将该文件读入变量.我发现的所有例子都试图阅读许多内容.我只想读取一个只包含PID的文件
#!/bin/sh
PIDFile="/var/run/app_to_kill.pid"
CurPID=(<$PIDFile)
kill -9 $CurPID
Run Code Online (Sandbox Code Playgroud) 当应用程序的进程被终止时,将保存其活动堆栈.然后,当重新启动应用程序时,我的所有活动都会恢复并运行为空指针.我宁愿让我的应用程序从基本活动开始,而不是尝试重新创建活动堆栈,而不是修改每个活动以适应此事件.
这可能吗?
我知道Intent.FLAG_ACTIVITY_CLEAR_TOP,但据我所知,只会在重新创建后杀死活动.
编辑:是clearTaskOnLaunch我想要什么?我已将其添加到我的默认活动中,但看不到任何效果.但即使我只是最小化应用程序,这也会扼杀我的活动,不是吗?如果整个过程重启,我宁愿只清除堆栈.
编辑2:不,这不是我想要的 - 一位Android工程师对如何使用ClearTaskOnLaunch的一些问题做出了彻底的回应:http://groups.google.com/group/android-developers/browse_thread/thread/da024bcaf4e1960f/ab1e2b35c360cb65 ?PLI = 1
现在我正在使用Process.Kill()来杀死进程.有没有办法,而不是立即杀死它,我可以向进程发送一条消息,指示它关闭,以便它可以优雅地清理和关闭.基本上,我正在寻找仅仅点击右上角的红色X的等价物,我相信它会向请求关闭的应用程序发送消息.
我使用a创建子进程fork()
.如果子进程无法在30秒内完成执行,父进程如何杀死子进程?我想允许子进程执行长达30秒.如果超过30秒,父进程将终止它.你有任何想法吗?
子进程以#开头
subprocess.Popen(arg)
Run Code Online (Sandbox Code Playgroud)
如果父母异常终止,有没有办法确保它被杀死?我需要这个在Windows和Linux上都可以工作.我知道这个Linux解决方案.
编辑:
subprocess.Popen(arg)
如果使用不同的启动流程的方法存在解决方案,则可以放宽启动子流程的要求.
打开管道到进程后popen
,有没有办法杀死已经启动的进程?(使用pclose
不是我想要的,因为它将等待进程完成,但我需要杀死它.)
我在某处读到KeyboardInterrupt
异常只在Python的主线程中引发.我还读到在子线程执行时主线程被阻塞.那么,这是否意味着CTRL+ C永远不会到达子线程.我尝试了以下代码:
def main():
try:
thread = threading.Thread(target=f)
thread.start() # thread is totally blocking (e.g., while True)
thread.join()
except KeyboardInterrupt:
print "Ctrl+C pressed..."
sys.exit(1)
def f():
while True:
pass # do the actual work
Run Code Online (Sandbox Code Playgroud)
在这种情况下,CTRL+ C对执行没有影响.它就像是无法收听信号.我理解这是错误的方式吗?有没有其他方法可以使用CTRL+ 杀死线程C?
我需要在Python中执行以下操作.我想生成一个进程(子进程模块?),并且:
实现这一目标的最优雅方式是什么?