首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

os.kill没有引发OSError,但是我没有看到给定的pid正在运行

在这个问题中,您提到了 os.kill 函数,它是 Python 的 os 模块中的一个函数,用于向指定的进程发送信号。您提到了 OSError 异常,这是 Python 中的一个常见异常,通常表示操作系统错误。

您的问题是:为什么使用 os.kill 函数没有引发 OSError,但是您没有看到给定的进程 ID (PID) 正在运行?

这个问题可能有多种原因,以下是一些可能的解释:

  1. 进程已经被成功终止:os.kill 函数可以成功地向进程发送信号,从而终止进程。如果您没有看到给定的 PID 正在运行,那么可能是因为进程已经被成功终止。
  2. 进程已经被其他信号终止:os.kill 函数可以向进程发送多种不同的信号。如果进程已经被其他信号终止,那么使用 os.kill 函数可能不会引发 OSError 异常。
  3. PID 重用:操作系统可能会重用 PID,因此即使进程已经终止,也可能存在具有相同 PID 的新进程。如果您没有看到给定的 PID 正在运行,那么可能是因为 PID 已经被重用。
  4. 权限问题:如果您没有足够的权限来查看进程的状态,那么您可能无法确定进程是否已经终止。在这种情况下,使用 os.kill 函数可能不会引发 OSError 异常。

为了解决这个问题,您可以尝试以下方法:

  1. 检查进程的状态:您可以使用 ps 命令或其他工具来检查进程的状态,以确定进程是否已经终止。
  2. 检查日志文件:您可以检查应用程序的日志文件,以查看是否有任何错误消息或警告消息,这些消息可能会提供有关问题的更多信息。
  3. 使用其他信号:您可以尝试使用其他信号,例如 SIGTERMSIGKILL,来终止进程,并查看是否引发 OSError 异常。
  4. 检查权限:您可以检查您的用户帐户是否具有足够的权限来查看进程的状态。如果您没有足够的权限,您可能需要使用具有更高权限的用户帐户来执行操作。
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

python中daemon守护进程实现方法

守护进程特性 1.在后台运行 2.与其运行环境隔离开来。这些环境包括未关闭文件描述符、控制终端、会话和进程组、工作目录以及文件创建掩码等。...总之,除开这些特殊性以外,守护进程与普通进程基本上没有什么区别。因此,编写守护进程实际上是把一个普通进程按照上述守护进程特性改造成为守护进程。...    verbose 表示将启动运行过程中异常错误信息打印到终端,便于调试,建议非调试模式下关闭, 默认为1, 表示开启     save_path 表示守护进程pid文件绝对路径    ...i % 10 == 0:                     os.kill(pid, signal.SIGHUP)         except OSError, err:            ...'/tmp/daemon_class.err.log' #守护进程启动过程中错误日志,内部出错能从这里看到     cD = ClientDaemon(p_name, pid_fn, stderr

76820

深入Python多进程编程基础——图文版

多进程编程知识是Python程序员进阶高级必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它具体实现原理。...下面对多进程常用知识点都简单列了一遍,使用原生多进程方法调用,帮助读者理解多进程实现机制。代码跑在linux环境下。没有linux条件,可以使用docker或者虚拟机运行进行体验。...signal.SIGKILL) time.sleep(5) # 父进程继续休眠5s观察子进程是否还有输出 运行python kill.py,我们看到控制台输出如下 in father process...如果我们将os.kill换一个信号才看结果,比如换成os.kill(pid, signal.SIGTERM),可以看到返回结果变成了(138, 15),15就是SIGTERM信号整数值。...我们发现第一次调用os.kill之后,子进程会继续输出。说明子进程没有被杀死。第二次os.kill之后,子进程终于停止了输出。 ?

78010

Python实现Daemon(守护)进程

编写了两种,第一种是编写了一个程序,将其用setsid命令让其放入后台运行,第二种是直接fork()一个进程,在代码里将进程设置为后台启动。...在os.sytem()函数其他外部程序时,发现os.system()是阻塞(os.popen()也是阻塞),就是启动外部程序,你必须等外部程序退出,它才继续运行。...用python中subprocess库时,发现它并不阻塞主进程运行但是,你用外部kill命令杀死进程时,子进程会变成僵尸进程,只有父进程退出后才会退出。...网上说在Windows平台下,python有个os.startfile是可以启动外部程序并不阻塞程序运行,因为Linux环境下,所以该函数不能用。...最后问其他朋友,他说可以在system()将输出重定向就可以了,试了一下,真的可以,所以现在把代码贴出了,也怪自己平常没有怎么钻。

1.3K20

深入Python多进程编程基础

多进程编程知识是Python程序员进阶高级必备知识点,我们平时习惯了使用multiprocessing库来操纵多进程,但是并不知道它具体实现原理。...下面对多进程常用知识点都简单列了一遍,使用原生多进程方法调用,帮助读者理解多进程实现机制。代码跑在linux环境下。没有linux条件,可以使用docker或者虚拟机运行进行体验。...signal.SIGKILL) time.sleep(5) # 父进程继续休眠5s观察子进程是否还有输出 运行python kill.py,我们看到控制台输出如下 in father process...如果我们将os.kill换一个信号才看结果,比如换成os.kill(pid, signal.SIGTERM),可以看到返回结果变成了(138, 15),15就是SIGTERM信号整数值。...我们发现第一次调用os.kill之后,子进程会继续输出。说明子进程没有被杀死。第二次os.kill之后,子进程终于停止了输出。

53220

Python守护进程daemon实现

1 守护进程 1.1 守护进程 守护进程是系统中生存期较长一种进程,常常在系统引导装入时启动,在系统关闭时终止,没有控制终端,在后台运行。...在这里,我们在Linux2.6内核centos中,ps -ef |awk '{print $1"\t "$2"\t "$3"\t  "$8}'看到:PPID=0进程有两个,分别是PID=1/sbin...注意,所有守护进程都以超级用户(用户ID为0)优先权运行没有一个守护进程具有控制终端,终端名称设置为问号(?)、终端前台进程组ID设置为-1。缺少控制终端是守护进程调用了setsid结果。..._exit(1) # 孙进程 # for i in range(3,64): # 关闭所有可能打开不需要文件,UNP中这样处理,但是发现在python中实现不需要。...python输出有缓冲,导致ser_log.out并不能够马上看到输出。

7.2K30

golang 服务平滑重启小结

背景 golang 程序平滑重启框架 supervisor 场景 defunct 问题 使用 master/worker 模式 背景 在业务快速增长中,前期只是验证模式是否可行,期间会忽略程序发布过程中因短暂停服引发服务不可用...仍有流量没有处理完成老服务,需要等处理完成后再停服。...我们正在小规模接入中。 golang 程序平滑重启框架 与 java、net 等基于虚拟机语言不同,golang 天然支持系统级别的调用,平滑重启处理起来很容易。...但是如果我们用了平滑重启框架,原来被 supervisor 启动进程发布重启 fork子进程之后正常退出,当再次发布重启 fork 子进程就会变成没有主进程,那么,此子进程就无法完成正常退出。...方法是守护方法,会拿到启动进程id,然后做 waitpid ,但是当我们 fork 进程时候主进程会退出,os.waitpid 会收到退出信号,然后就退出了,但是这是个正常切换逻辑。

1.5K20

Py异常处理

一旦引发而且没有捕捉SystemExit异常,程序执行就会终止。如果交互式会话遇到一个未被捕捉SystemExit异常,会话就会终止。...# 映射或序列上使用键或索引无效时引发异常基类 | ±- IndexError # 序列中没有此索引(index) | ±- KeyError # 映射中没有这个键 ±- MemoryError...如果try代码块中代码运行起来没有问题,Python将跳过except代码块; 如果try代码块中代码导致了错误,Python将查找查找这样execpt代码块,并运行其中代码,即其中指定错误与引发错误相同...可以看到,无论异常是否发生,在程序结束前,finally中语句都会被执行。异常也照常报错。...总结 这里要提请一下:try语句必须有一个except或一个finally,else是可选但是如果有else ,则必须至少有一个except。

1.5K30

Python学习之os模块及用法

) # 返回当前系统换行符 print(os.linesep) # 返回适合作为加密使用、最多3个字节组成bytes print(os.urandom(3)) 运行上面程序,可以看到如下输出结果:...os.kill(pid, sig):将 sig 信号发送到 pid 对应过程,用于结束该进程。 os.killpg(pgid, sig):将 sig 信号发送到 pgid 对应进程组。...,可以看到程序运行后使用 Excel 打开了 abe.xls 文件,也打开了 Notepad++ 工具,还使用 python 命令运行了 os_test.py 文件。...但如果将程序中粗体字代码取消注释,将看到程序运行后只是启动了 cmd 命令行程序,这是因为使用 as.system() 函数来运行程序时,新程序所在进程会替代原有的进程。...通过使用os模块,一方面可以方便地与操作系统进行交互,另一方面页可以极大增强代码可移植性。如果该模块中相关功能出错,会抛出OSError异常或其子类异常。

2.5K40

python中subprocess

bufsize,如果给定了,与内置行数open()参数有相同意义:0意味着无缓冲,1意味着线性缓冲,其他任何正值意味着使用缓冲区(大约)大小。..., 但是在unix系统中会以\n结束,windows中以\r\n结束。...) 这个模块也定义了一些简短函数: call(*popenargs, **kwargs):     运行带参数命令.  ...最常见异常是OSError,比如:执行一个不存在文件,应用程序会抛出OSError异常 如果Popen被无效参数调用就会抛出‘ValueError’ 如果check_call() and check_output...注意: 如果没有找到执行程序,所有在本节中函数都有可能以静默状态失败;这个模块会抛出OSError异常 在以下例子中, 我们假设subprocess 模块是"from subprocess import

1.6K30

《理解 Unix 进程》笔记-1

把子进程置为就绪态 向父进程返回子进程进程号;对子进程返回0。 所有这些操作都在父进程内核态下完成。 进程皆有标识 在系统中运行所有进程都有一个唯一进程标识符,称为 pid。...进程皆有父 系统中运行每一个进程都有对应父进程。每个进程都知道它父进程标识符(ppid)。 在 python 中查看当前进程 pid 可以使用 getppid() 方法。...硬限制: 硬限制只有超级用户才能修改,但是硬限制其实是一个无限大数字,可以认为是没有限制。...2 sys.exit() 会引发一个异常,如果异常没有被捕获,那么 python 解释器将会退出。...但是,如果进程衍生出了子进程,当你按下 Ctrl+C 时候,哪一个进程应该退出呢?是全部退出还是只有父进程退出? #!

88210

python异常报错详解

OSError 操作系统错误 WindowsError 系统调用失败 ImportError 导入模块/对象失败 LookupError 无效数据查询基类 IndexError 序列中没有此索引(index...这个异常总是定义但是只有当Python配置了该--with-fpectl选项,或者WANT_SIGFPE_HANDLER在pyconfig.h文件中定义了符号时,才能引发此异常 。...当内置函数input()或raw_input()正在等待输入时,键入中断也会引发此异常。异常继承 BaseException而不被意外地捕获Exception并因此阻止解释器退出代码被捕获 。...请注意,由于底层内存管理架构(Cmalloc()功能),解释器可能并不总是能够从这种情况中完全恢复; 但是引发了一个异常,以便可以打印堆栈跟踪,以防万一出现程序原因。...在用户定义基类中,当抽象方法需要派生类覆盖该方法时,抽象方法应引发此异常。 异常OSError 这个异常来源于EnvironmentError。

4.6K20

Python异常机制

异常指的是运行时程序遇到可以被捕捉错误。程序捕捉了异常,而不至于让程序运行错误而crash。异常增强了程序运行可靠性。...Exception as err: print(f"Unexpected {err=}, {type(err)=}") raise print("code reachs here.")我们可以看到运行了带异常捕获例子...不是Exception子类异常通常不被处理。它们被用来指示程序应该终止,包括由sys.exit()引发SystemExit,以及当用户希望中断程序时引发 KeyboardInterrupt。...捕获异常优先级分别是各个except从上到下去比对。且认为派生类异常会等于基类异常。所以在第一个for循环我们看到了输出,D-C-B。但是下一个for循环我们会看到输出,B-B-B。...它适用于 try 子句 没有引发异常但又必须要执行代码。

15000

【实测】windows下进程创建和终止-python3

因为最近在写测试平台需要在windows上运行, 所以就来探讨了一下windowsdos命令。 友情提示(本公众号实测系列请保存成书签,都是原创宝贵踩坑经验。...一般会使用进程pid来杀死该进程。 而获取pid方式,mac/linux 和 win就完全不同了。 mac/linux: p = p.pid 很简单,直接拿ppid就是了。...,在举例当中,用进程是一个python命令,所以要挟“python.exe” 但是为了确保能获取到正确那个python.exe(因为会有很多) 所以你在一开始时候,就需要给这个命令后面加上一个关键标识字符串...最后来看看,我们拿到了pid后要怎么杀死该进程: mac/linux: import os,signal os.kill(int(pid),signal.SIGKILL) 很简单吧~ 再看看win:...虽然大家可能在网上搜到不少其他各种各样方法,但是最好还是实际在终端或cmd中执行一下,亲眼看看它们输出。 不要直接粘贴复制~

72020
领券