我想要一种方法来杀死一个带有名称的随机进程(例如随机perl进程).
这样做的最佳方式是什么?
我有点想用这样的东西:
ps aux | grep PROCESS-NAME
Run Code Online (Sandbox Code Playgroud)
到一个文件,然后找到一个随机的行号,得到第二列(进程ID?)并杀死它.
对于我的使用它实际上不需要是随机的,只要它杀死其中一个进程.随机使它变得更好.
在.Net 3.5中,我有以下代码.
If File.Exists(sFilePath & IndexFileName & ".NX") Then
Kill(sFilePath & IndexFileName & ".NX")
End If
Run Code Online (Sandbox Code Playgroud)
在运行时,在一个客户端的机器上,当执行此代码时,我会一遍又一遍地得到以下异常
Source: Microsoft.VisualBasic
TargetSite: Microsoft.VisualBasic.FileSystem.Kill
Message: No files found matching 'I:\RPG\HGIAPVXD.NX'.
StackTrace:
at Microsoft.VisualBasic.FileSystem.Kill(String PathName)
(More trace that identifies the exact line of code.)
Run Code Online (Sandbox Code Playgroud)
运行此代码的不同计算机上有两个人,但只有一个人获得了异常.例外不会每次都发生,但它会定期发生.(每小时多次.)代码不在循环中,也不是连续运行,更像每隔几分钟一次.
从表面上看,这看起来像一个竞争条件,但考虑到这个代码的运行频率以及错误发生的频率,我认为必定会有其他事情发生.
我很感激有关如何追踪这里真正发生的事情的任何建议.保持错误发生的解决方案会更好.
像许多其他人一样,我想在"退出"按钮上杀死我的Android应用程序.真的杀了,不只是移动到后台并停止所有活动代码(我非常清楚Android不喜欢它).
我发现Process.killProcess(Process.myPid())与System.exit(0)这都工作得不错(我有活动堆栈没有问题,"退出"按钮,在我的基地活动).
但有一个问题.当我杀死我的进程并且我回到shell中时,我按下[Home]按钮.它显示了后台应用程序列表,包括已被杀死的应用程序.
有没有办法如何做到这两点:1)杀死进程和2)从用户按[Home]按钮后显示的Android应用程序列表中删除它?
感谢所有回复(除了那个愚蠢的"你不应该在Android上明确退出应用程序":-))
我正在尝试编写一个使用tgkill向特定线程发送信号的程序,但每当我用gcc编译它时,我都会收到有关'tgkill'未定义引用的错误.我尝试使用-lpthread编译,但它没有帮助.我用Google搜索并用Google搜索,无法得出任何答案.我如何编译?
是否可以拦截默认kill信号并将其用作正常关闭的命令?这适用于Solaris SMF.我找到一个可停止服务的最简单方法是设置:kill为关闭脚本,然后在Java中添加一个关闭钩子.在这种情况下,我想为Node.JS做.我该怎么办?
编辑:目的是
@ alienhard的第一个建议是使用,process.on('exit'...但似乎我不能用这种方法完成2号.
在ruby脚本中,我启动了更多的虚拟shell,每个虚拟shell由shell管理器对象管理,如下所示:
@shell = PTY.spawn 'env PS1="\w>" TERM=dumb COLUMNS=63 LINES=21 sh -i'
Run Code Online (Sandbox Code Playgroud)
在以后的某个时间点,我想销毁该实例并杀死相关的shell进程。可悲的是,我什么也无法正常工作。这是我尝试过的方法,按照工作的可能性排序:
system("kill #{@shell[2]")。这没有作用。当ruby程序退出时,所有的shell都关闭了,但是我想在保持程序运行的同时杀死它们。有人遇到过这样的事情吗?
我在Linux CentOS中执行了以下C代码来创建一个进程.
#include <stdio.h>
#include <unistd.h>
int main ()
{
int i = 0;
while ( 1 )
{
printf ( "\nhello %d\n", i ++ );
sleep ( 2 );
}
}
Run Code Online (Sandbox Code Playgroud)
我把它编译成了hello_count.当我这样做时./hello_count,输出是这样的:
hello 0
hello 1
hello 2
...
Run Code Online (Sandbox Code Playgroud)
直到我杀了它.我已使用以下命令停止执行
kill -s SIGSTOP 2956
Run Code Online (Sandbox Code Playgroud)
当我做
ps -e
Run Code Online (Sandbox Code Playgroud)
该过程2956 ./hello_count仍然列出.
是否有任何命令或任何方法可以恢复(不重启)进程号为2956的进程?
此外,当我停止该过程时,命令行显示:
[1]+ Stopped ./hello_count
Run Code Online (Sandbox Code Playgroud)
什么是[1]+在上面的线是什么意思?
有时我想要killall一个特定的过程,但运行killall不起作用.因此,当我尝试再次启动该过程时,它会失败,因为前一个会话仍在运行.然后我不得不单调乏味地继续前进killall -9.所以为了简化我的生活,我创建了一个realkill脚本,它是这样的:
PIDS=$(ps aux | grep -i "$@" | awk '{ print $2 }') # Get matching pid's.
kill $PIDS 2> /dev/null # Try to kill all pid's.
sleep 3
kill -9 $PIDS 2> /dev/null # Force quit any remaining pid's.
Run Code Online (Sandbox Code Playgroud)
那么,这是最好的方式吗?我可以通过哪些方式改进此脚本?
我发现了几篇关于如何使用jdb http://www.rhcedan.com/2010/06/22/killing-a-java-thread/或在SO上杀死Java线程的说明。这可行。现在,我想使用Intellij-IDEA调试器杀死线程。有可能吗?
我试图通过名称杀死进程,我将作为变量传递给系统命令.
以下是我所拥有的:
my $processName=$ARGV[0];
print "$processName\n";
system(q/kill -9 `ps -ef | grep '$processName' | grep -v grep | awk '{print $2}'`/);
Run Code Online (Sandbox Code Playgroud)
上面的脚本抛出一个错误:
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
Run Code Online (Sandbox Code Playgroud)
但是,如果我直接在系统命令中输入进程名称,它就可以工作.
有人可以帮我吗?