我希望看到一个程序在断开连接时如何响应.除了禁用网卡之外,有没有办法在Windows中切断tcp连接而不会终止进程,或者拥有连接的线程?
我正在用popen()打开一个长期运行的进程.对于调试,我想在完成之前终止该过程.调用pclose()只会阻塞直到孩子完成.
我怎么能杀死这个过程?我没有看到任何简单的方法来从popen()返回的资源中获取pid,以便我可以向它发送信号.
我想我可以做一些kludgey并尝试使用某种命令行hackery将pid捏到输出中...
我的应用运行地理定位服务,用户可以通过toggleButton激活或停用.要检查服务的状态,我在共享首选项中写了一个布尔值.由于我的服务的onDestroy(),我听服务的开始和结束.
我的问题是:当用户使用"高级任务杀手"杀死服务时,我不知道服务被杀死了,onDestroy没有被调用!
我该怎么处理?
谢谢你的帮助.
弗洛朗
我的应用程序正在使用正在进行的通知.我注意到当我通过DDMS终止我的应用程序时,不会取消正在进行的通知.但是,当我在进行Eclipse→Run时,该进程被终止并且通知被取消.
当Android系统决定杀死我的应用程序时会发生什么?通知是否被取消或Android是否只是在不进行任何清理的情况下终止进程?
编辑:
如果有一些清理完成,我怎么能模拟这种行为,以测试我的应用程序是否正常运行?
这些问题的过去答案都集中在分叉上:
对于这个问题,我只是询问对'系统'功能的调用.
假设我有一个名为sleep.pl的脚本:
use strict;
use warnings;
sleep(300);
Run Code Online (Sandbox Code Playgroud)
然后我有一个名为kill.pl的脚本
use strict;
use warnings;
system("sleep.pl");
Run Code Online (Sandbox Code Playgroud)
我运行kill.pl并使用ps我找到kill.pl的进程ID并杀死它(不使用kill -9,只是普通的kill)
sleep.pl还在睡觉.
我想我的问题的解决方案涉及一个SIG处理程序,但是我需要将什么内容放入处理程序来杀死子进程?
90%的时间我总是得到堆栈跟踪.但有时这个过程就会退出,我不明白为什么.无论如何总是打印堆栈跟踪?或者在dmesg中找到更多信息?
我想要一个无限循环继续运行,并且只被一个终止信号暂时中断。我试过 SIGINT、SIGUSR1、SIGUSR2。他们似乎都停止了循环。我什至尝试过 SIGINFO,但 Linux 不支持。
#!/bin/bash
echo $$ > /tmp/pid # Save the pid
function do_something {
echo "I am doing stuff" #let's do this now, and go back to doing the thing that is to be done over and over again.
#exit
}
while :
do
echo "This should be done over and over again, but always wait for someething else to be done in between"
trap do_something SIGINT
while `true`
do
sleep 1 #so we're waiting for that …Run Code Online (Sandbox Code Playgroud) 当我在kill()或signal()函数中使用SIGUSR1时,它在做什么?这是一个宏吗?我读到它是用户定义的,但它在哪里定义?我可以制作一个SIGUSR10(或以编程方式制作不同信号类型的"阵列")吗?
不是重复的:我可以很好地终止进程,我想知道如何在进程内检测它正在被终止,并优雅地关闭。
我有一个 CLI 工具来生成和终止子 node.js 进程。演示代码包含在这三个文件中:
spawn.js-- 将生成child.js脚本,分离。为了简单起见,我将孩子的管道传输stdio到一个out.log文件
child.js-- 写入文件的简单计数器,使用该readline方法检测 Windows 中的模拟 SIGINT
kill.jsprocess.kill()--使用子进程的 PID调用 a
生成.js
'use strict';
var spawn = require('child_process').spawn;
var fs = require('fs');
var path = require('path');
var childFilePath = path.resolve(__dirname, 'child.js');
var out = fs.openSync('./out.log', 'a');
var err = fs.openSync('./out.log', 'a');
var options = {
detached: true,
stdio: ['ignore', out, err],
};
var child = spawn(process.execPath, [childFilePath], options); …Run Code Online (Sandbox Code Playgroud) 在bash中,我可以pid通过$!变量获取最后一个子进程的进程ID()。然后,我可以在此子进程完成之前将其杀死:
(sleep 5) & pid=$!
kill -9 $pid
Run Code Online (Sandbox Code Playgroud)
这工作如广告。如果现在我在之后用更多命令扩展子流程,即使其他命令从未执行过sleep,该sleep命令也会在子流程被杀死后继续执行。
例如,考虑以下内容,它启动一个子流程并使用监视其暗杀ps:
# Start subprocess and get its pid
(sleep 5; echo done) & pid=$!
# grep for subprocess
echo "grep before kill:"
ps aux | grep "$pid\|sleep 5"
# Kill the subprocess
echo
echo "Killing process $pid"
kill -9 $pid
# grep for subprocess
echo
echo "grep after kill:"
ps aux | grep "$pid\|sleep 5"
# Wait for sleep to finish …Run Code Online (Sandbox Code Playgroud)