相关疑难解决方法(0)

Linux PID回收

Linux中是否有关于使用的PID回收的政策?我的意思是,如果使用了PId,它会在多久后再次使用?

linux pid recycle

66
推荐指数
2
解决办法
2万
查看次数

杀死使用Python的subprocess.Popen()创建的进程

这是我的想法:

首先,我使用subprocess.Popen创建了一个进程

第二,经过一段时间后,我试图通过Popen.kill杀死它()

import subprocess
import os, signal
import time

proc1 = subprocess.Popen("kvm -hda /path/xp.img", shell = True)
time.sleep(2.0)
print 'proc1 = ', proc1.pid
subprocess.Popen.kill(proc1)
Run Code Online (Sandbox Code Playgroud)

但是,"proc1"仍然存在于Popen.kill()之后.任何专家都可以告诉我如何解决这个问题吗?我很感激你的考虑.

感谢所有专家的评论,我做了你所做的一切,但结果仍然保持不变.

proc1.kill() #it sill cannot kill the proc1

os.kill(proc1.pid, signal.SIGKILL) # either cannot kill the proc1
Run Code Online (Sandbox Code Playgroud)

谢谢你们.

我仍然在等待你解决这个微妙问题的宝贵经验.

python popen

51
推荐指数
4
解决办法
11万
查看次数

Bash:等待超时

在Bash脚本中,我想做类似的事情:

app1 &
pidApp1=$!
app2 &
pidApp2=$1

timeout 60 wait $pidApp1 $pidApp2
kill -9 $pidApp1 $pidApp2
Run Code Online (Sandbox Code Playgroud)

即,在后台启动两个应用程序,并给他们60秒完成他们的工作.然后,如果他们没有在那段时间内完成,就杀了他们.

不幸的是,上面的代码不起作用,因为它timeout是一个可执行文件,而它wait是一个shell命令.我尝试将其更改为:

timeout 60 bash -c wait $pidApp1 $pidApp2
Run Code Online (Sandbox Code Playgroud)

但是这仍然不起作用,因为wait只能在同一个shell中启动的PID上调用.

有任何想法吗?

linux bash shell

45
推荐指数
3
解决办法
4万
查看次数

如何杀死shell的所有子进程?

我正在写一个bash脚本,它做了几件事.

最初它启动了几个监视器脚本,每个脚本都运行一些其他工具.

在我的主脚本结束时,我想杀死从我的shell中生成的所有东西.

所以,它可能看起来像这样:

#!/bin/bash

some_monitor1.sh &
some_monitor2.sh &
some_monitor3.sh &

do_some_work
...

kill_subprocesses
Run Code Online (Sandbox Code Playgroud)

问题是这些监视器中的大多数都会生成自己的子进程,所以这样做(例如):killall some_monitor1.sh并不总是有用.

还有其他办法可以处理这种情况吗?

bash shell fork kill process

37
推荐指数
6
解决办法
5万
查看次数

当父进程死亡时,如何杀死用subprocess.check_output()创建的python子进程?

我在linux机器上运行一个python脚本,它使用subprocess.check_output()创建一个子进程,如下所示:

subprocess.check_output(["ls", "-l"], stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)

问题是,即使父进程死亡,子进程仍在运行.当父母去世时,我有什么办法可以杀死孩子的过程吗?

python linux subprocess

28
推荐指数
2
解决办法
4万
查看次数

如何从python中杀死进程和子进程?

例如来自bash:

kill -9 -PID 

os.kill(pid, signal.SIGKILL) 只杀死父进程.

python

23
推荐指数
3
解决办法
5万
查看次数

子进程不会被Node.JS杀死

我用child_process.exec/ child_process.spawn到一个新的进程,然后用杀死它child.kill/ process.kill.它可以很好地处理简单的二进制可执行文件,例如cat/ ls,并且子进程就会被杀死.

然而,当到达脚本(比如P1)叉另一个子进程(比如P2) ,仅脚本解释P1被打死,而不是子进程P2.

问题:有没有办法让Node.JS杀死这样的子进程P2?

代码工作正常run_and_kill('ls -Al /usr/lib'),但不适用于run_and_kill('firefox'):

function run_and_kill(cmd) {
    var exec = require('child_process').exec,
        ls = exec(cmd);
    console.log('Child process started: %d', ls.pid);
    ls.on('exit', function(code, signal) {
        console.log('exit with code %s and signal %s', code, signal);
    });
    ls.kill();
}
Run Code Online (Sandbox Code Playgroud)

javascript node.js

19
推荐指数
1
解决办法
7755
查看次数

在shell脚本被终止时终止运行命令

出于测试目的,我有这个shell脚本

#!/bin/bash
echo $$
find / >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

从交互式终端运行,ctrl + c将终止bash和find命令.

$ ./test-k.sh
13227
<Ctrl+C>
$ ps -ef |grep find
$
Run Code Online (Sandbox Code Playgroud)

在后台运行它,并且仅杀死shell将孤立在脚本中运行的命令.

$ ./test-k.sh &
[1] 13231
13231
$ kill 13231
$ ps -ef |grep find
nos 13232     1  3 17:09 pts/5    00:00:00 find /
$
Run Code Online (Sandbox Code Playgroud)

我希望这个shell脚本在退出时终止它的所有子进程,而不管它是如何被调用的.它最终将从python和java应用程序启动 - 当脚本退出时需要进行某种形式的清理 - 我应该查看的任何选项或任何重写脚本以在退出时自行清理的方法?

bash

16
推荐指数
3
解决办法
1万
查看次数

有没有办法干净地杀死 uvicorn?

有没有办法干净地杀死 uvicorn?

即,如果它在终端的前台运行,我可以在它上面键入 ^C。这会导致 uvivorn 进程终止,并且所有工作进程都将被清理。(即,他们走开了。)

另一方面,如果 uvicorn 在没有终端的情况下在后台运行,那么我无法想出一种干净地杀死它的方法。它似乎忽略了 SIGTERM、SIGINT 和 SIGHUP。我可以用SIGKILL(即-9)杀死它,但是工作进程仍然存在,我必须跟踪所有工作进程并杀死它们。这并不理想。

我在 Red Hat Enterprise Linux Server 7.3 (Maipo) 上使用带有 CPython 3.7.4、uvivorn 版本 0.11.2 和 FastAPI 0.46.0 的 uvicorn。

python python-3.x fastapi uvicorn

15
推荐指数
2
解决办法
5274
查看次数

如何从bash脚本中杀死Django runserver子进程?

我正在Django网站上工作,我有各种需要运行的编译程序(Compass/Sass,coffeescript,hamlpy),所以我为了方便起见制作了这个shell脚本:

#!/bin/bash
SITE=/home/dev/sites/rmx

echo "RMX using siteroot=$SITE"
$SITE/rmx/manage.py runserver &
PIDS[0]=$!
compass watch $SITE/media/compass/ &
PIDS[1]=$!
coffee -o $SITE/media/js -cw $SITE/media/coffee &
PIDS[2]=$!
hamlpy-watcher $SITE/templates/hamlpy $SITE/templates/templates &
PIDS[3]=$!

trap "echo PIDS: ${PIDS[*]} && kill ${PIDS[*]}" SIGINT

wait
Run Code Online (Sandbox Code Playgroud)

除了Django服务器之外的所有东西都在a上很好地关闭,ctrl+c因为服务器进程的PID不是python manage.py runserver命令的PID .这意味着每次我停止脚本时,我都必须找到正在运行的进程PID并将其关闭.

这是一个例子:

$> ./compile.sh
   RMX using siteroot....
   ...
   [ctrl+c]
   PIDS: 29725 29726 29728 29729
$> ps -A | grep python
   29732 pts/2    00:00:00 python
Run Code Online (Sandbox Code Playgroud)

第一个PID 29725是初始python manage.py runserver调用,但29732它是实际的开发服务器进程.

编辑看起来这是由于Django的自动重载功能 …

python django bash shell

13
推荐指数
1
解决办法
3325
查看次数

标签 统计

python ×5

bash ×4

linux ×3

shell ×3

django ×1

fastapi ×1

fork ×1

javascript ×1

kill ×1

node.js ×1

pid ×1

popen ×1

process ×1

python-3.x ×1

recycle ×1

subprocess ×1

uvicorn ×1