Portál AbcLinuxu, 9. května 2025 22:45
subprocess.call()
nebo subprocess.Popen()
vždycky vyrobím potomka, ať už přes fork() nebo execvp(). Já ale potřebuju, aby se skript spustil v novém shellu jako nový proces, ne jako potomek toho to skriptu. Jde to vůbec nějak?
Pro ukázku jsem vyrobil dva jednoduché skripty, aby bylo vidět, jak to celé (ne)funguje.
foo.sh - spustí cokoliv co zadám v argumentu
#!/bin/bash $1foo.py - vyrobí socket a spustí skript foo.sh
import subprocess import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('localhost',8080)) s.listen(10) subprocess.call(['foo.sh', 'firefox']) time.sleep(30)Podle
fuser
, všechny procesy drží port 8080
yenn@wintermute:~$ fuser -v 8080/tcp USER PID ACCESS COMMAND 8080/tcp: yenn 9825 F.... python yenn 9826 F.... foo.sh yenn 9827 F.... firefox
Řešení dotazu:
subprocess.call(['./foo.sh', 'firefox'], close_fds = True)
(ono je to v dokumentaci napsano dost zmatene).
restart
nebo force-reload
dhcpd zastaví, znovu spustí a navíc ještě před spuštěním zkontroluje konfigurační soubor, takže zůstanu u volání init skriptu. Ale díky moc za rady.
PS: O zpracování http requestů se stará webserver (Python + CherryPy), takže to by neměl být problém.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.