Saltar al contenido

¿Cómo terminar el proceso desde Python usando pid?

Intenta entender el código bien antes de usarlo a tu trabajo si tdeseas aportar algo puedes comentarlo.

Solución:

Usando lo increíble psutil biblioteca es bastante simple:

p = psutil.Process(pid)
p.terminate()  #or p.kill()

Si no desea instalar una nueva biblioteca, puede utilizar el os módulo:

import os
import signal

os.kill(pid, signal.SIGTERM) #or signal.SIGKILL 

Véase también el os.kill documentación.


Si te interesa iniciar el comando python StripCore.py si no se está ejecutando y, de lo contrario, lo mata, puede usar psutil para hacer esto de manera confiable.

Algo como:

import psutil
from subprocess import Popen

for process in psutil.process_iter():
    if process.cmdline() == ['python', 'StripCore.py']:
        print('Process found. Terminating it.')
        process.terminate()
        break
else:
    print('Process not found: starting it.')
    Popen(['python', 'StripCore.py'])

Ejemplo de ejecución:

$python test_strip.py   #test_strip.py contains the code above
Process not found: starting it.
$python test_strip.py 
Process found. Terminating it.
$python test_strip.py 
Process not found: starting it.
$killall python
$python test_strip.py 
Process not found: starting it.
$python test_strip.py 
Process found. Terminating it.
$python test_strip.py 
Process not found: starting it.

Nota: En anteriores psutil versiones cmdline fue un attribute en lugar de un método.

Quería hacer lo mismo que, pero quería hacerlo en un archivo.

Entonces la lógica sería:

  • si se está ejecutando un script con mi nombre, elimínelo y luego salga
  • si un script con mi nombre no se está ejecutando, haga cosas

Modifiqué la respuesta de Bakuriu y se me ocurrió esto:

from os import getpid
from sys import argv, exit
import psutil  ## pip install psutil

myname = argv[0]
mypid = getpid()
for process in psutil.process_iter():
    if process.pid != mypid:
        for path in process.cmdline():
            if myname in path:
                print "process found"
                process.terminate()
                exit()

## your program starts here...

Ejecutar el script hará lo que haga el script. Ejecutar otra instancia del script eliminará cualquier instancia existente del script.

Lo uso para mostrar un pequeño widget de calendario PyGTK que se ejecuta cuando hago clic en el reloj. Si hago clic y el calendario no está activo, se muestra el calendario. Si el calendario se está ejecutando y hago clic en el reloj, el calendario desaparece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *