Domanda

Come faccio a 'fissare' una console / terminale al fine di un'uscita applicazioni in modo da poter vedere che cosa si può dire?

Come potrei staccare da un'uscita applicazioni senza uccidere l'applicazione?

Normalmente, se si spara un'applicazione loquace utilizzando la riga di comando si arriva a vedere tutti i tipi di uscita meraviglioso. Tuttavia, diciamo che ho un particolarmente loquace di programmazione in funzione, come KINO, e voglio vedere la sua uscita in qualsiasi momento senza dover riavviare attraverso la linea di comando. Non posso; almeno io non so come.

È stato utile?

Soluzione

Ci sono alcune opzioni qui. Uno è quello di reindirizzare l'output del comando in un file, e quindi utilizzare 'coda' per visualizzare le nuove linee che vengono aggiunti a tale file in tempo reale.

Un'altra opzione è quella di avviare il programma all'interno di 'schermo', che è una sorta di-testuale applicazione Terminale. le sessioni dello schermo possono essere attaccati e staccati, ma sono destinati nominalmente solo per essere utilizzato da parte dello stesso utente, quindi se si desidera condividerli tra gli utenti, è un grande dolore nel culo.

Altri suggerimenti

Credo di avere una soluzione più semplice qui. Basta guardare per una directory il cui nome corrisponde al PID che si sta cercando, sotto la pseudo-filesystem accessibile sotto il percorso /proc. Quindi, se si dispone di un programma in esecuzione, il cui ID è 1199, cd in esso:

$ cd /proc/1199

Quindi cercare la directory fd sotto

$ cd fd

Questa directory fd contenere il file-descrittori oggetti che il programma sta utilizzando (0: stdin, 1: stdout, 2: stderr) e appena tail -f quello che vi serve - in questo caso, stdout):

$ tail -f 1

che cercavo questa esattamente la stessa cosa e ho scoperto che si può fare:

strace -ewrite -p $PID

Non è esattamente quello che avevi bisogno, ma è abbastanza vicino.

Ho provato l'uscita reindirizzamento, ma che non ha funzionato per me. Forse perché il processo stava scrivendo ad una presa, non so.

  

Come potrei 'Allega' un   console / terminale-vista di un   Uscita applicazioni così posso vedere che cosa   si può dire?

A proposito di questa domanda, lo so che è possibile raggiungere l'uscita, anche quando non ha lanciato il comando sceen prima di lanciare il processus.

Mentre non ho mai provato, ho trovato un interessante articolo che spiega come fare utilizzando GDB (e senza riavviare il processo).

reindirizzare-output-da-un-running-process

In sostanza:

  1. Controllare la lista dei file aperti per il processo, grazie alla / proc / xxx / fd
  2. Allega il processo con GDB
  3. Anche se è in pausa, chiudere il file che ti interessa, chiamando close () la funzione (è possibile qualsiasi funzione del processo in GDB. Ho il sospetto è necessario simboli di debug nel vostro processo .. )
  4. Aprire il un nuovo file chiamando la la funzione create () o open (). (Date un'occhiata nei commenti alla fine, vedrete persone suggeriscono di utilizzare dup2 () al fine di garantire lo stesso handle sarà in uso)
  5. Stacca il processo e lasciare in esecuzione.

A proposito, se si esegue un sistema operativo Linux sulla scatola i386, commenti stanno parlando di uno strumento migliore per reindirizzare l'output a una nuova console: 'retty' . Se è così, prendere in considerazione il suo uso.

ho voluto guardare a distanza un processo di aggiornamento yum che era stato eseguito a livello locale, così, mentre ci sono stati modi probabilmente più efficaci per fare questo, ecco quello che ho fatto:

watch cat /dev/vcsa1

Ovviamente ci si vuole utilizzare vcsa2, vcsa3, ecc, a seconda di quale terminale è stato utilizzato.

Fino a quando la mia finestra di terminale era della stessa larghezza del terminale che il comando è stato eseguito su, ho potuto vedere una fotografia della loro uscita in corrente ogni due secondi. Gli altri comandi raccomandati altrove non ha funzionato particolarmente bene per la mia situazione, ma che uno ha fatto il trucco.

Per me, questo ha funzionato:

  1. Login come il proprietario del processo (il permesso anche root è negato)

    ~$ su - process_owner
    
  2. Tail il descrittore di file come detto in molti altre risposte.

    ~$ tail -f /proc/<process-id>/fd/1 # (0: stdin, 1: stdout, 2: stderr)
    
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top