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.