C#.NET 3.5
我有一个控制台应用程序,由计算机上的另一个应用程序调用.此控制台应用程序连续运行,并从"父"进程侦听stdin上的数据.
但是,当父项被停止或终止时,它启动的控制台应用程序将继续.在正常情况下,它使用最少的资源来等待来自stdin的输入.然而,一旦父母离开,这个控制台应用程序就会激活CPU,并使其运行的核心匮乏,利用率接近100%.这一直持续到我手动终止进程.
理想情况下,主叫父母会自行清理,特别是因为这是在正常(非特殊)"停止"条件下发生的.不幸的是,这个父进程不在我手中.
我的第一个想法是从控制台应用程序中获取调用父级,并监视其PID.如果父进程消失,我的控制台应用程序将自行终止.目前,我这样做:
Process process = Process.GetCurrentProcess();
m_ParentPID = 0;
using (ManagementObject mgmtObj = new ManagementObject("win32_process.handle='" + process.Id.ToString() + "'"))
{
mgmtObj.Get();
m_ParentPID = Convert.ToInt32(mgmtObj["ParentProcessId"]);
}
string parentProcessName = Process.GetProcessById(m_ParentPID).ProcessName;
Log("Parent Process: " + parentProcessName + Environment.NewLine);
// Create a timer for monitoring self.
Timer timer = new Timer(new TimerCallback(sender =>
{
if (m_ParentPID != 0)
{
Process parent = System.Diagnostics.Process.GetProcessById(m_ParentPID);
if (parent == null)
{
Log("Parent process stopped/killed. Terminating self.");
System.Environment.Exit(0);
}
}
}));
// Kick …Run Code Online (Sandbox Code Playgroud) 我要杀死一些进程和线程(如果存在)在Perl的应用程序,但我不希望使用外部命令(一个或多个),比如ps,grep,awk,cut,uniq或kill.
我目前的代码是:
my $appName = $0;
$appName =~ s/^.*\/([^\/]*)$/$1/;
$_ = qx(kill -9 `ps -eLao pid,command | grep '$appName\[ 0-9\]*\$' |
grep -v grep | awk '\$1 != $$' | cut -d' ' -f1 | uniq` 2>&1);
Run Code Online (Sandbox Code Playgroud)
我正在使用VPS,所以我的记忆力有限.上面的代码有时会返回undef,因为系统无法为外部命令的调用分配内存.我正在寻找替代解决方案,而不使用外部命令.
我使用Cordova 1.7.0,但尝试使用1.6.1并调用我在互联网上找到的所有完全退出应用程序的方法.但我的Android应用程序始终在后台运行.我用:
document.addEventListener("backbutton", function(e) {
if ($.mobile.activePage.attr('id') === 'homePage') {
navigator.app.exitApp();
} else {
window.history.back();
}
}, false);
Run Code Online (Sandbox Code Playgroud)
现在,它完全退出模拟器,但从不在设备上.在android中退出时是否有可靠的方法来杀死Phonegap应用程序?
我有一个用Python编写的线程服务器,我开始使用以下shell脚本:
#!/bin/bash
base_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
public_dns=$(curl -s http://169.254.169.254/latest/meta-data/public-hostname)
echo $public_dns > "$base_path/client/address"
cd "$base_path/server"
python "server.py" &
echo $! > "$base_path/server_pid"
echo "Server running"
Run Code Online (Sandbox Code Playgroud)
我将PID回显到一个文件,以便我可以使用另一个shell脚本关闭服务器:
#!/bin/bash
base_path="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
kill -9 `cat "$base_path/server_pid"`
rm "$base_path/server_pid"
rm "$base_path/client/address"
Run Code Online (Sandbox Code Playgroud)
但是,我知道这是一个糟糕的方法,考虑到服务器有许多线程具有进入网络和硬盘的I/O ......所以我想做的是让第二个脚本以某种方式与服务器交互并告诉它启动一个关闭序列,它将干净地关闭所有线程,关闭和存档日志等.
现在我知道atexit,我用这种方式测试了它:
import atexit
def byebye(o):
o.write('stop')
o.flush()
o.close()
o = open('log','w')
o.write('start')
o.flush()
atexit.register(byebye, o)
while True:
pass
Run Code Online (Sandbox Code Playgroud)
但是,当我kill -9的过程,byebye()是不是被解雇了.我应该使用除了全能者kill -9 …
我开发了android应用程序,我在菜单选项中有退出按钮.我想退出应用程序并按下退出按钮进入主屏幕.因为我使用了以下方法
1.System.exit(0)
2.finish()
3.android.os.Process.killProcess(android.os.Process.myPid())
4.System.runFinalizersOnExit(true);
这些所有方法直接应用我的第一页不到主屏幕.那我该怎么做?请帮我
该命令kill $$应该杀死当前的bash,但似乎它不起作用:
$ ps -p $$
PID TTY TIME CMD
18179 pts/4 00:00:00 bash
$ kill $$
$ ps -p $$
PID TTY TIME CMD
18179 pts/4 00:00:00 bash
Run Code Online (Sandbox Code Playgroud)
为什么?
我希望你可以帮助我这个,我的C#非常生疏.
我在表单加载时运行可执行文件.
private void Form1_Load(object sender, EventArgs e)
{
ProcessStartInfo exe = new ProcessStartInfo();
exe.Arguments = "arguments";
exe.FileName = "file.exe";
Process.Start(exe);
}
Run Code Online (Sandbox Code Playgroud)
我想用一个按钮来杀死那个过程,但我不知道如何实现这个目标.
private void button1_Click(object sender, EventArgs e)
{
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
我在bash脚本中有一个函数,如果进程正在运行,我想返回true,否则返回false.我的功能代码是:
checkProcess() {
if [ kill -s 0 $(getPid) > /dev/null 2>&1 ]; then
return 0
else
return 1
fi
}
Run Code Online (Sandbox Code Playgroud)
当我使用此功能时,它似乎不起作用.我这样使用它:
if [ ! checkProcess ]; then
#do something, like rm file containing PID
fi
Run Code Online (Sandbox Code Playgroud)
但是如果我只是使用下面的实现它可以正常工作:
if [ ! kill -s 0 $(getPid) > /dev/null 2>&1 ]; then
#do something, like rm file containing PID
fi
Run Code Online (Sandbox Code Playgroud)
是否有一个原因?我没有在函数中返回正确的值吗?还是只是错误地实施了?
我有一个服务从服务器收听一些事件.一个服务有START_STICKY标志,当他被操作系统杀死时,它会重新启动.当服务收到一个事件我有两个场景.首先,如果活动没有被杀死,我需要将结果发送到本地广播接收器并更新UI.其次,如果它被OS杀死我想重新创建它并以捆绑方式发送数据.
但我不知道如何识别android杀死了我的活动.onDestroy活动事件不会出现这种情况.
@Override
public void onComplete(CurrentOrdersResponse response) {
if (response == null) {
return;
}
boolean isActivityDestroyed = mPreferences.getBoolean(MainActivity.IS_MAIN_ACTIVITY_DESTROYED_PREF_KEY, false);
if (!isActivityDestroyed)
sendResult(response.getResJSONStr(), CURRENT_ORDERS_ACTION);
else {
Intent intent = new Intent(this, MainActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(extras);
startActivity(intent);
}
int resCode = response.getResCode();
Log.i(LOG_TAG, "Service resCode" + " " + resCode);
}
Run Code Online (Sandbox Code Playgroud) 我执行到Docker容器中 docker exec -it container-name bash
在容器里面我运行命令 ps aux | grep processName
我收到一个PID,然后运行:
kill processId 但收到:
-bash: kill: (21456) - No such process
我错过了什么或?我知道Docker top在主机ps aux内部和容器内显示不同的进程ID (如何杀死容器内的进程?Docker top命令),但是我是从容器内运行的?