2014-10-30 21 views
6

Ho letto di ptys dall'esempio di questa pagina: http://rachid.koucha.free.fr/tech_corner/pty_pdip.html. Ho due domande:differenza tra pty e una pipe

  • Qual è la differenza, o la differenza più importante, tra l'utilizzo di una pty e l'utilizzo di una pipe? Da quello che ho letto, entrambi sono per la comunicazione tra processi, ma con una pty il processo può "trattarlo come un normale terminale". Cosa significa?

  • Che cos'è un "terminale di controllo"? Ho letto di loro ma non riesco a capire cosa siano realmente. Il terminale di controllo è sempre il pty assegnato al processo?

+0

La mia domanda è negativa ? Non vedo una risposta e mi chiedevo se ho chiesto qualcosa di sbagliato – kprincipe

+0

No, la tua domanda è buona (ricordo che me ne sono chiesto anch'io). È molto ampio, tuttavia, e difficile da rispondere non tecnicamente, mentre l'articolo che citi è già molto buono. Proverò a dare una risposta sotto –

+0

Per i PTY, vedi anche http://en.wikipedia.org/wiki/Pseudo_terminal – nos

risposta

9

Il article si parla è eccellente, e difficile da migliorare, ma è piuttosto tecnico. Cercherò di dare una spiegazione tecnica meno (portare con me, guru di Unix!)

Un tubo è solo un canale dati unidirezionale: può essere scritto solo su un lato, e leggo dall'altro. Per la comunicazione inter-processo bidirezionale è necessario sempre due pipe. I tubi sono eccellenti per spostare i bit in giro, ma non per molto altro ancora.

A pty (pseudoterminale) può essere letto e scritto su entrambe le estremità, ma è molto più di un semplice canale di dati bidirezionale. Per capirlo, è utile dare un'occhiata ad un vero terminale: ad una estremità c'è un processo che legge i tasti e invia caratteri ad un teletype o schermo. Dall'altra parte c'è un vero umano che bussa alla tastiera e fissa lo schermo sopra menzionato. Solo una estremità ha un descrittore di file, l'altra estremità è solo un connettore e un cavo.

Storicamente, i terminali hanno sviluppato molti attributi che possono essere controllati dai programmi in esecuzione su di essi (come "modalità eco" o "modalità canonica", vedere termios (3)) Inoltre, un terminale può consentire all'utente (tramite il metodo sopra - connettore e cavo indicati) invia segnali che possono essere utilizzati per il "controllo del lavoro", ad es digitando CTRL-Z per mettere un lavoro in primo piano in background.

Un pty è come un vero e proprio terminale dove entrambe le estremità sono descrittori di file:

  • slave fine si comporta esattamente come un vero terminale: un processo che ha un descrittore di fine slave ("processo inferiore") può leggere e scrivere su di esso, ma anche impostare gli attibutes del terminale come la modalità echo o il carattere di interrupt (ad es. CTRL + C). Di solito non si rende nemmeno conto che non è collegato a uno schermo e una tastiera reali.

  • fine maestro sembra più una tastiera e telescrivente per l'uso, non per gli esseri umani, ma da altri processi: qualsiasi processo che ha aperto alla fine il master può scrivere su di essa, e riceveranno eco (ma solo se il processo inferiore ha impostato l'attributo ECHO sullo slave). Può anche (sulla maggior parte dei moderni) controllare la sessione in cui lo slave è il suo terminale di controllo), ad es. inviando CTRL + Z.

Per comprendere ciò che un terminale di controllo è, è ancora utile pensare lo scenario in cui un vero utente è connesso a un terminale reale.L'utente può avviare una "sessione", ovvero una raccolta di processi, alcuni dei quali in lavori in primo piano, altri in background.

Per evitare il caos, un terminale di controllo (ovvero la struttura del kernel ad esso associata) tiene traccia di quali processi sono in un lavoro in primo piano o in background e quali processi sono autorizzati a leggere e scrivere su di esso. Ogni volta che un processo tenta qualcosa di illegale (come un processo in background dal terminale di controllo) l'operazione fallirà (con EIO) e l'intero lavoro verrà quindi arrestato dal kernel (usando il segnale SIGTTIN)

Questo dimostra che, solo come con un vero terminale, solo il terminale slave di una pty può essere un terminale di controllo e che il concetto ha senso solo su un sistema Unix che supporta il controllo del lavoro (qualsiasi sistema Unix, al giorno d'oggi)

+0

Capisco meglio ora, sono solo un po 'confuso con il terminale di controllo, è il terminale di controllo qualsiasi processo connesso allo slave o lo slave è il terminale di controllo? – kprincipe

+0

Un processo non viene mai chiamato "terminale". L'estremità slave di una pty può essere il terminale di controllo di una sessione. Il processo più vecchio in una sessione è chiamato "leader della sessione" (spesso sarà una specie di shell) e di solito (ma non necessariamente) è il processo che istruisce il terminale di controllo a mettere altri gruppi di processi in background o in primo piano. In un certo senso si potrebbe chiamare questo processo il "terminale controller", ma mai il "terminale di controllo" –

+0

Oh I see The pty è come un programma terminale virtuale che gestisce come i programmi interagiscono e utilizzano le risorse – kprincipe