Domanda

Sono incerto se usare o pty.fork() os.fork() quando la deposizione delle uova processi in background esterni dal mio app. (Come ad esempio i motori di scacchi)

Voglio che i processi generati a morire se il genitore viene ucciso, come con le applicazioni di deposizione delle uova in un terminale.

Quali sono gli alti e bassi tra le due forchette?

È stato utile?

Soluzione

Il processo figlio creato con os.fork() eredita stdin / output / error dal processo principale, mentre il bambino creato con pty.fork() è collegato al nuovo pseudo terminale. È necessario il più tardi, quando si scrive un programma come xterm: pty.fork() nel processo genitore restituisce un descrittore per controllare terminale del processo figlio, in modo da poter rappresentare visivamente i dati da esso e tradurre le azioni degli utenti in sequenze di input del terminale

.

Aggiornamento:

Da PTY (7) pagina man:

  

Un processo che prevede di collegare   ad un terminale, può aprire la parte slave   di una pseudo-terminale e poi essere   azionata da un programma che ha   ha aperto la parte master. Tutto ciò che   è scritto sul lato master è   fornito al processo sullo slave   fine come se fosse stato digitato input su   un terminale. Ad esempio, scrivendo il   interrompere carattere (solitamente   Controllo-C) al dispositivo master   causerebbe un segnale di interrupt   (SIGINT) da generato per la   gruppo processo in primo piano che è   connessa allo slave. Al contrario,   tutto ciò che è scritto nel   parte slave della lattina pseudo-terminale   essere letta dal processo che è   collegata alla parte master.

Altri suggerimenti

In passato ho sempre usato il modulo subprocess per questo. Esso fornisce una buona API per comunicare con i sottoprocessi.

È possibile utilizzare call(*popenargs, **kwargs) per bloccare l'esecuzione di loro, e credo che utilizzando la classe Popen in grado di gestire l'esecuzione asincrona.

Controlla la docs per maggiori informazioni.

Per quanto usando os.fork vs pty.fork, entrambi sono altamente dipendenti dalla piattaforma, e né funzionerà (o almeno è testato) con finestre. Il modulo pty sembra essere più vincolata dei due leggendo la documentazione. La differenza principale è l'aspetto pseudo terminale. Quindi, se non si è disposti a architetto il codice in un modo tale da essere in grado di utilizzare il modulo subprocess, probabilmente sarei andare con os.fork invece di pty.fork.

Pseudotermials sono necessarie per alcune applicazioni che realmente si aspettano un terminale. Una shell interattiva è uno di questi esempi, ma ci sono molti altri. L'opzione pty.fork non è lì come un altro os.fork ma come un'API specifica per utilizzare una pseudoterminal.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top