Portál AbcLinuxu, 9. listopadu 2025 17:05
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.