我在新分配的项目中发现了一堆脚本,即"关闭"脚本.他们只是做一些基本搜索并运行Unix kill命令.他们有什么理由不应该这样关闭这个过程吗?这是否确保动态分配的内存将正确返回?还有其他负面影响吗?我在直觉下操作,这是终止进程的最后手段.
父母有几个子线程.
如果用户单击停止按钮,则应使用所有子线程终止父线程.
//calls a main thread
mainThread = new Thread(new ThreadStart(startWorking));
mainThread.Start();
////////////////////////////////////////////////
startWorking()
{
ManualResetEventInstance = new ManualResetEvent(false);
ThreadPool.SetMaxThreads(m_ThreadPoolLimit, m_ThreadPoolLimit);
for(int i = 0; i < list.count ; i++)
{
ThreadData obj_ThreadData = new ThreadData();
obj_ThreadData.name = list[i];
m_ThreadCount++;
//execute
WaitCallback obj_waitCallBack = new WaitCallback(startParsing);
ThreadPool.QueueUserWorkItem(obj_waitCallBack, obj_ThreadData);
}
ManualResetEventInstance.WaitOne();
}
Run Code Online (Sandbox Code Playgroud)
我想杀死mainThread.
我试图找出是否有办法按名称和用户杀死所有进程.例如,我想杀死用户myuser运行的所有Java实例.
从我做的那一刻起:
$ pgrep -u myuser java
2185
3281
3413
3504
22534
26174
27554
Run Code Online (Sandbox Code Playgroud)
它给出了mysuer运行java的pid列表.然后我个别杀了每个pid.有一个更好的方法吗?
提前致谢!
到底kill是做什么的?
我有一个父进程,它一个接一个地创建100(作为示例)子进程.在任何孩子的工作结束时,我杀了孩子,kill(pid_of_child, SIGKILL)我在ps输出中看不到.但是如果父进程出现问题并且我从父进程退出exit(1)(此时只有1个子进程- 我可以检查它ps),那时我看到很多<defunct>进程ppid是pid父进程的.
怎么可能?没有kill彻底杀死孩子的过程?
当我的程序被kill来自操作系统的命令杀死时,我想捕获异常(或其他).
我想在关闭之前将消息打印到日志文件.
有办法吗?
谢谢
请检查此python代码:
#!/usr/bin/env python
import requests
import multiprocessing
from time import sleep, time
from requests import async
def do_req():
r = requests.get("http://w3c.org/")
def do_sth():
while True:
sleep(10)
if __name__ == '__main__':
do_req()
multiprocessing.Process( target=do_sth, args=() ).start()
Run Code Online (Sandbox Code Playgroud)
当我按Ctrl-C(运行后等待2秒 - 让Process运行)时,它不会停止.当我将导入订单更改为:
from requests import async
from time import sleep, time
Run Code Online (Sandbox Code Playgroud)
它在Ctrl-C之后停止.为什么它不会在第一个例子中停止/杀死?
这是一个错误还是一个功能?
笔记:
multiprocessing.__version__ == 0.70a1,requests.__version__ == 0.11.2,gevent.__version__ == 0.13.7我想重启一个程序.
我找到了这个过程并调用了Kill方法,然后我再次运行它:
process.Kill();
的Process.Start();
它会停止但不会启动.
此外,如果我把退出事件,它永远不会发生.
有什么问题?
在Linux机器上,我最多运行3个java jar文件.如何使用一个命令快速杀死所有3个?
通常我会:
ps ex - 让进程运行
然后找到进程ID然后执行:
kill -9 #### #### ####
有什么方法可以缩短这个过程吗?我眯着眼睛眯着眼睛看着过程ids.
我的脚本执行以下操作:
nohup ./start-gossip &
nohup ./start &
nohup ./start-admin &
Run Code Online (Sandbox Code Playgroud)
有没有办法在不查找的情况下获取每个进程ID?
我正在尝试编写一个生成子进程的函数,让它运行一段时间然后如果它还没有完成就杀死它:
int sysExecTimeout(const char * exePath, int timeoutSec);
Run Code Online (Sandbox Code Playgroud)
在功能方面,我使用fork并execl产卵的孩子,而且,当它超时,我用kill(pid, SIGTERM)和kill(pid, SIGKILL)2秒后,为保证儿童死亡:
pid_t pid = fork();
if(pid == 0) {
execl("/bin/sh", "sh", "-c", exePath);
exit(127);
} else if(pid != -1) {
// timeout code
if(timeout) {
kill(pid, SIGTERM);
sleep(2);
kill(pid, SIGKILL);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Linux,似乎当父进程终止时,子进程不会自动被杀死.所以这两个kill调用只会终止/bin/sh进程并让exePath命令继续运行,因为它是一个子进程/bin/sh.
我正在尝试编写sysExecTimeout函数,以便它杀死整个进程树pid,其中pidPID来自pid = fork()
我需要这个,因为该exePath命令将产生其他命令,这些命令也可能产生其他命令,这些命令可能会卡住并消耗资源.
我无法控制exePath执行的二进制文件/脚本,因此我无法在其中编写自己的parent-dies-so-kill-the-children逻辑.
我尝试使用kill(0, SIGTERM),几乎完成了这项工作,除了它也杀了我自己的进程:)
我想知道是否有一个标志我可以在C中以编程方式打开,说"嘿,我死的时候,带走所有的孩子并杀死他们,并为他们的孩子递归重复",这样整个过程树就从那个程序开始死(假设可以遵循PID/PPID链). …
只是想知道如何杀死由指定用户运行的具有相同名称的所有进程。例如,我可以有多个由不同用户运行的program.exe。我可以使用:
get-process program.exe | kill
Run Code Online (Sandbox Code Playgroud)
杀死所有人 但是我只想杀死由指定用户运行的那些实例。有方便的方法吗?