일부 프로세스는 콘솔 출력을 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/ttyS0
stdout 또는 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
lsof
Linux에서는 이것이 쉘의 표준 출력에 기록된다고 가정하면 누가 연결되어 있는지 확인하기 위한 기본 프로세스를 찾을 수 있어야 합니다 .
% 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