一部のプロセスはコンソール出力を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