Queste funzioni possono venire usate per creare e gestire i processi.
Le diverse funzioni exec*() prendono in input una lista di
argomenti, che vengono passati al programma caricato nel nuovo
processo. In ciascun caso, il primo di questi argomenti passati al
programma è il nome del programma stesso, piuttosto che un argomento
digitato dall'utente sulla riga di comando. Per i programmatori in C,
questo è il corrispondente dell'argomento argv[0]
passato alla
funzione main() di un programma. Per esempio,
"os.execv('/bin/echo', ['foo', 'bar'])" stamperà solamente
"bar" sullo standard output; "foo" verrà apparentemente
ignorato.
) |
3
. Fatte attenzione al fatto che
i programmi che usano signal.signal() per registrare una
funzione di gestione del segnale SIGABRT, si comporteranno
diversamente.
Disponibilità: Unix, Windows.
path, arg0, arg1, ...) |
path, arg0, arg1, ..., env) |
file, arg0, arg1, ...) |
file, arg0, arg1, ..., env) |
path, args) |
path, args, env) |
file, args) |
file, args, env) |
Le varianti "l" e "v" delle funzioni exec*() si differenziano per il modo in cui i parametri sulla riga di comando vengono passati. Le varianti "l" sono forse le più facili con cui lavorare se il numero di parametri non varia una volta scritto il codice; i singoli parametri semplicemente diventano argomenti addizionali delle funzioni execl*(). Le varianti "v" sono utili quando il numero di parametri è variabile, dato che vengono passati come lista o tupla, corrispondente all'argomento args. In ogni caso, i parametri sulla riga di comando per il processo figlio devono iniziare con il nome del comando che si sta per eseguire.
Le varianti che includono una "p" verso la fine del nome (execlp(), execlpe(), execvp() e execvpe()) faranno uso della variabile di ambiente PATH per localizzare il programma file. Quando le variabili di ambiente vengono sostituite (usando una delle varianti exec*e() discusse nel prossimo paragrafo), il nuovo ambiente viene utilizzato come sorgente per la variabile PATH. Le altre varianti, execl(), execle(), execv() ed execve() non faranno uso della variabile di ambiente PATH per localizzare l'eseguibile; in questo caso l'argomento path deve contenere un percorso appropriato, relativo o assoluto, per arrivare ad esso.
Per execle(), execlpe(), execve() e execvpe() (notate come tutte abbiano un nome che termina per "e"), l'argomento env deve essere un oggetto di tipo mappa, usato per definire le variabili di ambiente per il nuovo processo; le funzioni execl(), execlp(), execv() e execvp() fanno tutte in modo che il nuovo processo erediti l'ambiente del processo corrente. Disponibilità: Unix, Windows.
n) |
sys.exit(n)
.
_exit() dovrebbe venire usata normalmente solo da processi
figli creati da fork().
Vengono definiti i seguenti codici di uscita utilizzabili con _exit(), sebbene non richiesti. Questi codici vengono di solito usati per programmi di sistema scritti in Python, come ad esempio un server di posta che per la consegna dei messaggi.
) |
0
nel flusso di controllo del processo figlio,
mentre in quello del processo padre restituisce l'identificativo del
processo figlio.
Disponibilità: Unix.
) |
(pid, fd)
, dove pid vale 0
nel
processo figlio ed è uguale all'identificativo del processo figlio nel
processo padre, mentre fd è il descrittore di file della
terminazione master dello pseudo terminale. Per un approccio più
portabile, usate il modulo pty.
Disponibilità: alcune varianti di Unix.
pid, sig) |
pgid, sig) |
increment) |
op) |
<sys/lock.h>
) determina quali segmenti vengono
bloccati.
Disponibilità: Unix.
...) |
...) |
...) |
...) |
mode, path, ...) |
mode, path, ..., env) |
mode, file, ...) |
mode, file, ..., env) |
mode, path, args) |
mode, path, args, env) |
mode, file, args) |
mode, file, args, env) |
-signal
, dove
signal indica il segnale che ha ucciso il processo.
In windows, l'identificativo del processo sarà in effetti l'handle
dello stesso, in modo da poter venire usato con la funzione
waitpid().
Le varianti "l" e "v" della funzione spawn*() si differenziano nel modo in cui vengono passati i parametri da linea di comando vengono passati. Le varianti "l" sono forse le più facili con le quli lavorare se il numero di parametri viene fissato, una volta scritto il codice; i parametri individuali semplicemente diventano parametri aggiuntivi delle funzioni spawnl*(). Le varianti "v" sono adatte quando il numero dei parametri è variabile, dato che essi vengono passati come lista o tupla corrispondente all'argomento args. In entrambi i casi, gli argomenti del processo figlio devono cominciare con il nome del programma che tale processo sta per eseguire.
Le varianti che includono una seconda "p" verso la fine del nome (spawnlp(), spawnlpe(), spawnvp() e spawnvpe()) useranno la variabile di ambiente PATH per localizzare il programma file. Quando le variabili di ambiente vengono sostituite (usando una delle varianti spawn*e() discusse nel prossimo paragrafo), il nuovo ambiente viene utilizzato come sorgente della nuova variabile PATH. Le altre varianti, spawnl(), spawnle(), spawnv() e spawnve(), non useranno la variabile PATH per localizzare l'eseguibile; path deve contenere un percorso appropriato, assoluto o relativo.
Per quanto riguarda le funzioni spawnle(), spawnlpe(), spawnve(), e spawnvpe() (notate che tutte hanno nomi che terminano in "e"), l'argomento env deve essere un oggetto di tipo mappa usato per definire le variabili di ambiente per il nuovo processo; le funzioni spawnl(), spawnlp(), spawnv() e spawnvp() fanno tutte in modo che il nuovo processo erediti l'ambiente del processo corrente.
Come esempio, considerate come le seguenti chiamate a spawnlp() e spawnvpe() siano equivalenti.
import os os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null') L = ['cp', 'index.html', '/dev/null'] os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)
Disponibilità: Unix, Windows. spawnlp(), spawnlpe(), spawnvp() and spawnvpe() non sono disponibili in Windows. Nuovo nella versione 1.6.
-signal
, se un segnale ha
ucciso il processo.
Disponibilità: Unix, Windows.
Nuovo nella versione 1.6.
path) |
startfile() restituisce il controllo non appena l'applicazione associata viene lanciata. Non ci sono opzioni per attendere che l'applicazione si chiuda, e non c'è modo di recuperare il valore di uscita della funzione. Il parametro path è relativo alla directory corrente. Se volete usare un percorso assoluto, assicuratevi che il primo carattere non sia uno slash ("/"); la sottostante funzione Win32 ShellExecute() non funzionerebbe in questo caso. Usate la funzione os.path.normpath() per assicurarvi che il percorso venga codificato correttamente per Win32. Disponibilità: Windows. Nuovo nella versione 2.0.
command) |
posix.environ
, sys.stdin
,
ecc., non vengono riflessi nell'ambiente del comando eseguito.
Su Unix, il valore restituito è lo stato di uscita del processo codificato nel formato usato per wait(). Notate che POSIX non specifica il significato del valore di ritorno della funzione C system(), per cui il valore restituito della funzione Python dipende dal sistema su cui sta girando.
Su Windows, il valore restituito è quello restituito dalla shell di
sistema dopo aver eseguito il comando command, ottenuto dalla
variabile di ambiente di Windows COMSPEC: su sistemi con
command.com (Windows 95, 98 e ME) questo valore è sempre
0
; in sistemi con cmd.exe (Windows NT, 2000 e XP)
questo valore corrisponde allo stato di uscita del comando eseguito;
per sistemi che usano una shell non nativa, consultate la
documentazione della shell.
Disponibilità: Unix, Windows.
) |
) |
pid, options) |
Su Unix:
Attende il completamento di un processo figlio con identificativo
pid, e restituisce una tupla contenente il suo identificativo e
l'indicazione del suo stato di uscita (codificata come per
wait()). La semantica della chiamata viene influenzata dal
valore del parametro intero options, che per operazioni normali
dovrebbe valere 0
.
Se pid è più grande di 0
, waitpid() richiede
informazioni di stato per il processo specifico. Se pid vale
0
, la richiesta viene effettuata per un qualunque sotto processo
dello stesso gruppo del processo corrente. Se pid vale
-1
, la richiesta riguarda un qualsiasi processo figlio del
processo corrente. Se pid è inferiore a -1
, viene
richiesto lo stato per un qualsiasi processo con identificativo di
gruppo pari a -pid
(valore assoluto di pid).
Su Windows:
Attende il completamento di un processo identificato dall'handle
pid e restituisce una tupla contenente pid e lo stato di
uscita del processo spostato a sinistra di 8 bit (questo rende più
semplice l'utilizzo multipiattaforma della funzione). Un valore del
pid minore o uguale a 0
non ha significato particolare in
Windows, e causa il sollevamento di un'eccezione. Il valore del
parametro intero options non ha effetto. pid può
riferirsi a qualunque processo di cui si conosca l'dentificativo, non
necessariamente ad un processo figlio. La funzione spawn()
chiamata con P_NOWAIT restituisce degli handle adatti per
venire usati con questa funzione.
Le seguenti funzioni accettano come argomento un codice di uscita di un processo come restituito da system(), wait(), o waitpid(). Possono venire usate per determinare il modo in cui è terminato il processo.
status) |
True
se viene generato un core dump per il processo,
altrimenti restituisce False
.
Disponibilità: Unix.
Nuovo nella versione 2.3.
status) |
True
se il processo viene fatto continuare dopo
essere stato bloccato, altrimenti restituisce False
.
Disponibilità: Unix.
Nuovo nella versione 2.3.
status) |
True
se il processo viene bloccato, altrimenti
restituisce False
.
Disponibilità: Unix.
status) |
True
se il processo è terminato a causa di un
segnale, altrimenti restituisce False
.
Disponibilità: Unix.
status) |
True
se il processo è terminato usando la funzione
di sistema exit(2), altrimenti restituisce False
.
Disponibilità: Unix.
status) |
WIFEXITED(status)
vale True
, restistuisce il
parametro intero passato alla funzione di sistema exit(2).
Altrimenti, il valore restituito è privo di significato.
Disponibilità: Unix.
status) |
status) |
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.