원격 프린터로 페이지를 인쇄하는 프로세스가 무엇인지 STDIN을 통해 어떻게 알 수 있습니까?

원격 프린터로 페이지를 인쇄하는 프로세스가 무엇인지 STDIN을 통해 어떻게 알 수 있습니까?

일부 프로세스는 콘솔 출력을 stdin원격 인쇄 서버로 보냅니다. 컵 프린터가 구성되어 있으면 인쇄됩니다. 그래서 컵을 비활성화해야합니다. 뭔가가 실행되고 lp있는 것 같아요 lpr. 일반적으로 대규모 프로젝트를 컴파일한 후 어느 정도 시간이 지나면 시작됩니다.

실행 중인 프로세스를 찾는 방법이 있나요?

내가 아는 건 컵페이지 내역에서 그 직업을 보는 것 뿐이다.http://remote-print-server.example.com:631/:

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

업데이트: 이것은 전달에 관한 것입니다 . 프린터가 로컬로 연결되어 있지 않기 때문에 stdin로컬 로그가 없습니다 . :-(. 위의 텍스트는 컵 네트워크 로그에서 복사되었습니다.journalctl

답변1

콘솔이 다음과 같다고 가정하면 장치를 사용하여 파일 설명자를 검색 /dev/ttyS0할 수 있습니다 ./proc/<pid>/fd

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

그런 다음 해당 출력에서 1 -> /dev/ttyS0​​(표준 출력) 또는 (표준 오류)를 검색하면 2 -> /dev/ttyS0stdout 또는 stderr용 콘솔을 사용하여 모든 프로세스의 ID를 찾을 수 있습니다.

또는 가지고 있는 경우 lsof다음과 같이 사용할 수 있습니다.

$ 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

답변2

lsofLinux에서는 이것이 쉘의 표준 출력에 기록된다고 가정하면 누가 연결되어 있는지 확인하기 위한 기본 프로세스를 찾을 수 있어야 합니다 .

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

strace그런 다음 , , 와 같은 추적 프로그램을 사용 perf trace하거나 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

관련 정보