Могу ли я передать вывод запущенного процесса по конвейеру? [duplicate]

Я использовал другой ffserver.conf нашел здесь , чтобы эта работа работала:

Port 8090 
# bind to all IPs aliased or not 
BindAddress 0.0.0.0 
# max number of simultaneous clients 
MaxClients 1000 
# max bandwidth per-client (kb/s) 
MaxBandwidth 10000 
# Suppress that if you want to launch ffserver as a daemon. 
NoDaemon 

 
File /tmp/feed1.ffm 
FileMaxSize 5M 
 


Feed feed1.ffm
Format swf
VideoCodec flv
VideoFrameRate 15
VideoBufferSize 80000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
VideoSize 352x288
PreRoll 0
Noaudio

2
25.05.2018, 23:08
2 ответа

Puede hacer esto en Linux. Digamos que hay un guións:

#!/bin/bash
i=0
echo my pid: "$$"
while true; do
    echo "$i"; ((i++)); sleep 1; 
done

Ejecútalo:

$./s
my pid: 8815
0
1
2

Y así sigue... Ahora necesita gdbpara adjuntar al proceso.

gdb -p 8815

Ahora estás en gdb. Aquí haz esto:

p close(1)

Esto ha cerrado el descriptor de archivo STDOUT. Ahora abre uno nuevo:

p creat("/tmp/8815.out", 0600)

En otra terminal ya puedes configurar el proceso de lectura:

tail -f /tmp/8815.out

Todavía no llega nada, ya que debe desconectarse de gdben la otra terminal. Ya sea Ctl + D , o:

q
Quit anyway? (y or n) 

Confirme con yy Introduzca . Y ahora deberías ver (donde tailse está ejecutando )algo como esto:

173
174
175

Si prefiere usar un archivo o tubería ya existente, hágalo engdb:

p open("/path/to/your/output", 1)

Esto ilustra la redirección de STDOUT. Es similar con STDERR, solo que tiene el número 2.


Usé estas dos respuestas:

1
27.01.2020, 22:18

Puede usar teecuando inicie el programa. Si está usando bash, puede hacer:

program > >(tee -a log.txt)

Eso redirigirá la salida estándar de programa una sustitución de proceso que ejecuta tee. Eso esencialmente escribe una copia de la salida estándar de programa log.txt. teecontinuará enviando la salida estándar a donde sea que vaya antes, probablemente la terminal dependiendo de cómo funcione program.

0
27.01.2020, 22:18

Теги

Похожие вопросы