Como descobrir qual processo está imprimindo páginas na impressora remota através de STDIN?

0

Algum processo envia a saída do meu console por stdin para o servidor de impressão remoto. Se houver xícaras de impressora configurada, ela será impressa. Então eu preciso manter os copos desativados. Suspeito que algo está executando lp ou lpr . Geralmente começa algum tempo depois de eu compilar um grande projeto.

Existe alguma maneira de encontrar depois de qual processo é executado?

A única coisa que sei é ver o trabalho no link da web da copa :

ID        Name       User Size  Pages   State
foo-11612 (stdin)    user 1634k Unknown completed at Tue 06 Feb 2018 12:49:30 UTC

UPDATE: trata-se de imprimir em stdin . Eu não tenho nenhum log local, exceto journalctl , como a impressora não está conectada localmente :-(. O texto acima é copiado do log de webs de copos.

    
por pevik 06.02.2018 / 15:26

2 respostas

0

Supondo que seu console é /dev/ttyS0 , você pode pesquisar /proc/<pid>/fd para descritores de arquivos com esse dispositivo:

$ sudo ls -l /proc/[0-9]*/fd

Em seguida, procure essa saída para 1 -> /dev/ttyS0 (saída padrão) ou 2 -> /dev/ttyS0 (erro padrão) e você poderá localizar os IDs de qualquer processo que esteja usando o console para stdout ou stderr.

Como alternativa, se você tiver lsof , poderá usar isso:

$ sudo lsof /dev/ttyS0
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
agetty  3955 root    0u   CHR   4,64      0t0 4046 /dev/ttyS0
agetty  3955 root    1u   CHR   4,64      0t0 4046 /dev/ttyS0
agetty  3955 root    2u   CHR   4,64      0t0 4046 /dev/ttyS0
    
por 06.02.2018 / 17:12
0

No Linux, supondo que isso esteja sendo gravado no stdout do seu shell, você deve ser capaz de encontrar processos em potencial usando lsof para verificar quem está conectado:

% lsof -t "/proc/$$/fd/1"
23717
26269

Você pode descobrir quem está fazendo gravações usando um programa de rastreamento como strace , perf trace ou usando o eBPF:

% strace -s 1000 -ewrite -p "$(lsof -t "/proc/$$/fd/1" | paste -sd,)"
[pid 26680] write(1, "foo\n", 4)        = 4
[pid 26680] write(1, "bar\n", 4)        = 4
[pid 26680] write(1, "baz\n", 4)        = 4
    
por 06.02.2018 / 17:32