我想创建一个与父进程分离的子进程,这样如果父进程退出,子进程将继续。我正在 Windows 上工作并执行了以下操作:
if(CreateProcess(program, arguments, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE | CREATE_NO_WINDOW | DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo))
{
CloseHandle(pinfo.hProcess);
CloseHandle(pinfo.hThread);
}
Run Code Online (Sandbox Code Playgroud)
在我的例子中,父进程继续运行,而子进程在后台执行。如果我在终端中按 Ctrl-C 来终止父进程,则子进程将按预期继续执行。但是,如果我在 Window 的任务管理器中杀死父进程,则子进程也会被杀死。
为什么Ctrl-C和任务管理器中的查杀有区别?即使父级在任务管理器中被杀死,有什么方法可以确保子级继续运行?
我实际上知道这个实现:Flutter 以编程方式关闭应用程序,但是当应用程序关闭时仍然在后台。我怎样才能完全杀死应用程序而不让它在后台?
谢谢!
从Perl脚本中删除进程及其所有子进程的最佳方法是什么?它应该至少在Linux和Solaris下运行,并且不需要安装任何其他软件包.
我的猜测是通过解析/ proc中的文件或解析输出来获取所有进程及其父进程的列表(这两种进程ps在Linux和Solaris之间都不可移植); 然后杀死树中的所有进程(这似乎容易出现竞争条件).
在这种特殊情况下,我可以忍受竞争条件,但我如何轻松获取进程列表?
我想使用子进程来运行程序,我需要限制执行时间.例如,如果运行时间超过2秒,我想杀死它.
对于常见程序,kill()运行良好.但是,如果我尝试运行/usr/bin/time something,kill()不能真正杀死该程序.
我的下面的代码似乎不能很好地工作.该程序仍在运行.
import subprocess
import time
exec_proc = subprocess.Popen("/usr/bin/time -f \"%e\\n%M\" ./son > /dev/null", stdout = subprocess.PIPE, stderr = subprocess.STDOUT, shell = True)
max_time = 1
cur_time = 0.0
return_code = 0
while cur_time <= max_time:
if exec_proc.poll() != None:
return_code = exec_proc.poll()
break
time.sleep(0.1)
cur_time += 0.1
if cur_time > max_time:
exec_proc.kill()
Run Code Online (Sandbox Code Playgroud) 在android中,Google建议我们在Application中保存全局变量.但是有一个问题,如果android os由于内存不足而终止应用程序,应用程序将重新创建并且我保存的全局变量将丢失.
我不知道何时保存/恢复这些变量,应用程序没有给我们一些方法,如onsaveinstancestate()/ onrestoreinstancestate().
我有一个想法,但我无法确保它能够很好地运作.我看到一些应用程序会在os杀死它时转到slashScreen,也许我们可以在SplashAvtivity中保存这些gloabl变量?因为Activity有方法onsaveinstancestate()/ onrestoreinstancestate(),app首先启动splashActivity并且没有完成它,当我们发现os杀死app时,我们可以再去SplashActivity(在任务中完成所有活动)然后onrestoreinstancestate ().
有没有其他好的方法来保存/撤销全局变量?当然,我认为如果谷歌可以在应用程序中为我们提供诸如onsaveinstancestate()/ onrestoreinstancestate()之类的方法,那就更好了.:S
我是Linux新手,我正在构建一个程序,该程序接收进程的名称,获取其PID(我对这部分没有问题),然后将PID传递给kill命令,但它不起作用。事情是这样的:
read -p "Process to kill: " proceso
proid= pidof $proceso
echo "$proid"
kill $proid
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么它没有杀死它吗?我知道还有其他一些方法可以做到这一点,即使使用 PID,但它们似乎都不适合我。我相信这是 Bash 语言(我刚刚开始学习)的某种问题。
任何人都可以告诉我如何使用端口4848和8080杀死Glassfish实例.
我安装了Glassfish,发现Glassfish安装工作不正常,因此停止使用Glassfish服务器(./asadmin stop-domain)从我的ubuntu机器上删除了所有Glassfish文件.
现在我下载了其他Glassfish版本(每晚构建5.0,因为JDBC MySQL不起作用)并尝试启动服务器(./asadmin start-domain).我收到以下错误.
有一个进程已经使用管理端口4848 - 它可能是GlassFish服务器的另一个实例.
如何通过其可执行文件的绝对文件路径杀死进程?因此,我想杀死从给定位置的可执行文件创建的所有进程?
回答:
kill $(ps aux | grep '<absolute executable path>' | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud) 我想rosbag通过终端优雅地终止一个实例。在这种情况下,优雅地意味着该文件在终止后rosbag没有后缀.active 。
所以我从终端执行以下操作将推荐发送SIGINT到 rosbag:
$ rosbag record /some/topic &
$ RPID=$!
$ # do some stuff
$ kill -2 $RPID
Run Code Online (Sandbox Code Playgroud)
不幸的是,包仍然处于活动状态,并且可能会发生并非所有内容都存储到磁盘中的情况。但是,如果我将 rosbag 放入启动文件中,它似乎可以工作:
$ roslaunch rosbag_record.launch &
$ LPID=$!
$ # do some stuff
$ kill -2 $LPID
Run Code Online (Sandbox Code Playgroud)
现在 rosbag 保持完整,并且存储时没有活动后缀。
现在有趣的问题是,在第一种情况下我做错了什么。我认为杀死启动文件,并在本例中杀死 roscore,会引发 a ,这会导致所有进程中的ros::shutdown()a 。SIGINT但使用手动方式kill似乎有不同的行为。
当用户在 iOS 13 上的应用切换器中向上滑动我的应用时,我发现对我获得(或未获得)的事件进行分类和说明非常困难。这似乎是由于多个场景引起的变化支持。在那种情况下我会遇到什么事件?