リモートプリンタでページを印刷するプロセスが何であるか、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

関連情報