随着时间的推移,我的Mac会变慢 原因是我的大量贝壳,如Bashes and Fishes.每个shell都有不同的PID.一个接一个地杀死炮弹太麻烦了.我怎么能立刻杀死他们?
我想测试一下,如果使用多重进程,我可以在32位操作系统上使用超过4GB的内存(我的:Ubuntu,1GB内存).
所以我编写了一个小程序,mallocs略小于1GB,并对该阵列执行一些操作,并运行该程序的5个实例查询分叉.
问题是,我怀疑操作系统杀死了其中的4个,只有一个幸存下来并显示它是"PID:我已经完成了").
(我用小阵列尝试了它并获得了5次打印,当我用TOP查看正在运行的进程时,我只看到一个实例..)
奇怪的是这个 - 我收到了所有实例中的返回码0(成功?),包括那些据称被OS杀死的实例
我没有得到任何按摩说明过程被杀死了.
这种情况的返回码是否正常?
(如果是这样,它会降低我对'返回代码'的信任......)
谢谢.
编辑:一些答案提示小程序中可能存在错误,所以在这里.分叉和保存返回代码的较大程序较大,我在这里上传时遇到了麻烦,但我认为(希望)没关系.
另外我注意到如果不是用我的分叉程序运行它,我使用'./a.out&./a.out&./a.out&./a.out&'在终端上运行它(当./a.out是附加的小程序的二进制文件.我确实看到了一些"被杀"的消息.
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#define SMALL_SIZE 10000
#define BIG_SIZE 1000000000
#define SIZE BIG_SIZE
#define REAPETS 1
int
main()
{
pid_t my_pid = getpid();
char * x = malloc(SIZE*sizeof(char));
if (x == NULL)
{
printf("Malloc failed!");
return(EXIT_FAILURE);
}
int x2=0;
for(x2=0;x2<REAPETS;++x2)
{
int y;
for(y=0;y<SIZE;++y)
x[y] = (y+my_pid)%256;
}
printf("%d: I'm over.\n",my_pid);
return(EXIT_SUCCESS);
}
Run Code Online (Sandbox Code Playgroud) 是否可以在不引发异常的情况下终止Java线程?
这仅用于测试目的 - 我想模拟整个计算机死于中间线程的情况.
注意 - 我看到了一个已弃用的Thread.destroy()方法,但文档说它从未实现过.
我的程序中的主要过程分配3个进程,并将进程ID称为pid1,pid2,pid3.Pid1和pid2进程处于无限循环中.我想要的是当pid3进程结束时,包括main终止的所有进程.截至目前,我正在使用:
wait(pid3);
kill(0, SIGKILL);
Run Code Online (Sandbox Code Playgroud)
正如我所说的那样完成所有这些,但它在终端上打印杀死.我不希望信号显示被杀死,事实上没什么,但优雅地退出程序.我怎样才能做到这一点?
我有一个线程打开一个MyMessageAlert类型的形式.此表单是一个弹出窗口,在我调用它时打开.它有一个定时器,在30秒后调用CloseWindow()方法.
m_messagAlert = new MyMessageAlert();
ParameterizedThreadStart thStart = new ParameterizedThreadStart(m_messagAlert.setMessage);
Thread thread = new Thread(thStart);
thread.Start(strMessage); //at this point, the MyMessageAlert form is opened.
Run Code Online (Sandbox Code Playgroud)
我已经定义了一个类型线程列表:
public List<Thread> m_listThread;
Run Code Online (Sandbox Code Playgroud)
每次我创建一个线程,我都将它添加到我的列表中:
m_listThread.Add(thread);
Run Code Online (Sandbox Code Playgroud)
当我关闭应用程序时,我希望打开的MyMessageAlert类型的形式将立即关闭(不等待30秒).问题是我无法阻止它!
我尝试使用Abort()函数通过循环遍历列表来杀死它:
foreach (Thread thread in m_listThread)
{
if (thread.IsAlive)
thread.Abort();
}
Run Code Online (Sandbox Code Playgroud)
但它没有帮助.
在PHP中,我可以使用die()来杀死整个脚本.但是,我希望脚本执行到某个点并退出而不会使整个脚本死亡.
像这样的东西:
echo "Hello, what is your name?";
if($name == $blacklist)
{
echo "I don't talk to strangers";
die(); // This will break all the echos
}
else
// Stuff
Run Code Online (Sandbox Code Playgroud)
我只是希望脚本终止(并将回声打印到终止点),并且使用die()实际上会使脚本不打印.
有任何想法吗?也许在C中"返回0"?
我有一个很少执行的重要操作.在某些情况下,执行可能需要几分钟.我的应用程序在50秒操作后被杀死.怎么避免呢?
我应该把它放在后台线程中吗?谁能请我指出正确的方向.我没有找到任何关于所谓看门狗的有用信息.是后台线程的方式吗?
我有一个启动子进程的Ruby脚本.我希望他们在整个过程被杀死时被杀死.
IO.popen('testacular start unit.conf.js', 'w')
Run Code Online (Sandbox Code Playgroud)
运行我的脚本:
user.name:/my/repo [git: my-branch] $ ruby my-script.rb
Run Code Online (Sandbox Code Playgroud)
来自testacular的输出:
user.name:/my/repo [git: my-branch] $ info: Testacular server started at http://localhost:8000/
info (launcher): Starting browser PhantomJS
info (PhantomJS 1.7): Connected on socket id uVAO41Q2niyLA8AqbZ8w
PhantomJS 1.7: Executed 44 of 44 SUCCESS (0.213 secs / 0.115 secs)
Run Code Online (Sandbox Code Playgroud)
点击Control-C来杀死进程.检查正在运行的进程:
user.name:/my/repo [git: my-branch] $ ps
PID TTY TIME CMD
# ...
39639 ttys019 0:01.28 node /usr/local/bin/testacular start unit.conf.js
39649 ttys019 0:00.09 node /usr/local/bin/phantomjs /var/folders/2p/dklw3xys2n3f4hqmx73zvz6w0000gp/T/testacular-61981618/capture.js
39650 ttys019 0:00.82 /usr/local/lib/node_modules/phantomjs/lib/phantom/bin/phantomjs /var/folders/2p/dklw3xys2n3f4hqmx73zvz6w0000gp/T/testacular-61981618/capture.js
Run Code Online (Sandbox Code Playgroud)
我们可以看到testacular进程仍在运行.
手动杀死它,看看典型的testacular关闭输出: …
我在后台开始使用以下过程:
erl -s system start -detached
Run Code Online (Sandbox Code Playgroud)
我需要杀死这个过程.有没有办法杀死在后台运行的所有进程?
我试过了:
init:reboot()
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个可以杀死所有被阻止进程的SQL脚本.
我错过了什么吗?
declare @max_count int, @count int, @sqlstring varchar(100)
declare @spid_table table (spid int NOT NULL)
INSERT @spid_table
select spid
from master.dbo.sysprocesses
where spid in (select blocked from master.dbo.sysprocesses where blocked > 0)
select @max_count = MAX(spid) FROM @spid_table
select top 1 @count = spid from @spid_table
while @count <= @max_count
begin
select @sqlstring = 'kill ' + CONVERT(varchar(4), @count)
exec(@sqlstring)
end
Run Code Online (Sandbox Code Playgroud)