V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  zictos  ›  全部回复第 125 页 / 共 147 页
回复总数  2940
1 ... 121  122  123  124  125  126  127  128  129  130 ... 147  
2020-12-30 18:44:46 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
写成函数,只要传入某个进程的 pid 就可以杀死该进程以及该进程下面的子进程。把 killprocess(pid)中的 pid 替换为要杀的进程的 pid 即可

def killprocess(pid):
****import psutil
****childlist = psutil.Process(pid).children(recursive=True)
****for i in childlist:
********i.kill()
****psutil.Process(pid).kill()
2020-12-30 18:02:06 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
@abersheeran #17
@JCZ2MkKb5S8ZX9pq #18

15 楼已经解决了,已经可以获取到子进程对象了,杀进程可以再加一个循环
for i in pidlist:
####i.kill()
@icy37785 #27 那我去哪里留意呢?网站申请时不需要登录,留邮箱也是索要发票才需要留,邮箱也只收到了发票,我邮件都会看的。这样的话有合同与没合同有什么关系呢?没纸质合同不代表没有事实上的合同,总不可能每次网购或者去店里消费也都签一份合同吧!网上页面显示的就都可以视为合同内容。
那敢问你说的打官司打赢了是哪一年的事?十几年前的事吗?官司打赢了后运营商才在合同上标注是吧?我办了很多次宽带,从来没见过合同,的确不知道合同具体内容是什么。包括我现在用的联通手机卡都是 2014 年在美团上买的,好像是本地营业厅做的团购,只问了我身份证号就直接把卡寄给我了,也是没任何其他合同。
@wunonglin #23 其实没合同对用户更好,合同一般是保护运营商的,运营商会写各种各样的格式条款,出现争议后就怪你没看。反正有工信部监管,没合同也不怕,只要能证明有办过宽带就行了。
我发现现在很多运营商办理业务时连纸质凭证都不提供了,我两年前去广州移动办理业务,就叫我在屏幕上签字,纸质凭证都没有。认真你就输了。
@wunonglin #18 湖南长沙电信你在申请页面找一下上行速率看看,其他地区没写的也有得是。真没有人上门给过合同,我发誓,否则天打雷劈
@dototototo
就是在网上提供电话和地址提交一下,然后第二天就有师傅上门来安装,从头至尾都不用去营业厅,网上的申请页面也没有任何地方说到上行速率的问题。不都是这样吗?哪来的合同?发票还是有的,没什么好担心的
那么多人拿合同说事,我办宽带压根就没见过合同,都是网上申请的,就算有合同也不会写上行速率
2020-12-30 00:47:08 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
15 楼写错了,“进程”二字全部写成了“线程”
2020-12-30 00:43:45 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
@yucongo #13
可用,不过你的代码好像根本描述的效果不一样,我刚自己写着尝试了一下。把下面代码中的“[四空格]”替换成真正的 4 个空格就可以直接运行了
■■■■■■■■分割■■■■■■■■■■



from multiprocessing import Process
import psutil, os, time

def test1():
[四空格]print('我是主线程创建的第一个子线程,我的 pid 是%s' % os.getpid())
[四空格]#在第一个子线程下面继续创建子线程
[四空格]p2 = Process(target=test2)
[四空格]p2.start()
[四空格]time.sleep(1000)

def test2():
[四空格]print('我是子线程创建的子线程,是主线程的孙线程,我的 pid 是%s' % os.getpid())
[四空格]#在第二个子线程下面继续创建子线程
[四空格]p3 = Process(target=test3)
[四空格]p3.start()
[四空格]time.sleep(1000)

def test3():
[四空格]print('我是主线程的孙线程创建的子线程,我的 pid 是%s' % os.getpid())
[四空格]time.sleep(1000)

if __name__ == '__main__':
[四空格]#创建子线程 p1
[四空格]p1 = Process(target=test1)
[四空格]p1.start()

[四空格]#获取子线程 p1 的 pid
[四空格]pid = p1.pid

[四空格]#等待 4 秒后获取子线程 p1 下面所有子线程的 pid
[四空格]time.sleep(4)
[四空格]pidlist = psutil.Process(pid).children(recursive=True)
[四空格]print('pid 为%s 下面的所有子线程为%s' % (pid, pidlist))
2020-12-29 23:43:41 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
@tonic #6
其实把子进程设为守护进程就可以让子进程在父进程被杀死时自动退出,但守护进程下面不能再创建子进程了。
p = Process(target=test) #创建子进程 p
p.daemon = True #把子进程 p 设为守护进程
p.start()
2020-12-29 19:14:08 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
笨办法不是没有,比如每创建一个子进程就把子进程的 pid 以及归属哪个父进程的信息写入全局变量中或写入数据库或者写入文本中,然后结束时一个个判断 pid 属于哪个分组并且判断是否存在就行了。只是不知道有没有更简单的,可能有,但是没发现。另外如果是第三方模块创建的子进程这么做就不行了
2020-12-29 19:07:21 +08:00
回复了 zictos 创建的主题 Python Python 如何一次性终止某个子进程下面的所有子进程?
@black11black #1
@emSaVya #2
能识别是哪个子进程下面的子进程吗?因为可能有多个进程,并且不同进程下面都有子进程,而我只需要结束某个子进程以及该子进程下面的子进程。

python 我只知道能直接获取当前进程下面的所有子进程的 pid (子进程下面的子进程好像不行),对于我题的例子来说,能不能直接在主进程 m 处获取子进程 p 下面的所有子进程的 pid 列表呢?然后再分别终止对应 pid 。
或者如果事先对每个子进程进行有规则的命名,有没有办法通过名称来达到直接终止进程的目的呢?
2020-12-29 01:49:50 +08:00
回复了 zictos 创建的主题 Python Python 能获取光标(非鼠标)位置吗?
@ysc3839 #7 的确没原始需求了,本来是打算每次按 ctrl+c 复制文本时直接在屏幕上的光标位置显示“复制成功”,因为有时候 ctrl+c 会偶尔有失效的情况,所以有时候保险起见会多次按 ctrl+c 。
我输入文字的时候为防止意外情况一般都会每隔一段时间就按一下 ctrl+c,比如在网站上发言以及一些不能自动保存的编辑器的时候。
但后来才想起来复制文本时并不一定存在“输入光标”,比如有时候网页上不能编辑的位置的文字复制时就没有“输入光标”。
所以直接在鼠标所在位置提示就行了,一开始主要是追求完美,当时屏幕显示文字方面等其他问题都搞定了,就差这个问题。

这种功能可能游戏脚本或者一些其他鼠标键盘的自动化脚本会有用到的需求,一般的确用不到。但“凭想象”来说只要系统提供这样的接口的话一般应该是可以实现,并不是什么特别复杂的功能。
1 ... 121  122  123  124  125  126  127  128  129  130 ... 147  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1743 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 29ms · UTC 16:40 · PVG 00:40 · LAX 08:40 · JFK 11:40
Developed with CodeLauncher
♥ Do have faith in what you're doing.