[解決済み] コマンドラインを使用して、起動後のプロセスのSTDERR / STDOUTをリダイレクトする?
2022-06-07 09:57:55
質問
シェルでリダイレクトを行うことができます。
>
<
などができますが、プログラムが起動した後ではどうでしょうか?
私がこの質問をすることになった経緯は、私のターミナルのバックグラウンドで実行されているプログラムが、迷惑なテキストを出力し続けるというものです。それは重要なプロセスなので、私はテキストを避けるために別のシェルを開く必要があります。私は、次のことができるようにしたいと思います。
>/dev/null
または他のリダイレクトができるようにして、同じシェルで作業を続けることができるようにしたいです。
どのように解決するのですか?
tty を閉じて再び開く (つまり、ログオフして再びオンにする。その過程でバックグラウンド プロセスのいくつかが終了する可能性がある) こと以外に、残された選択肢は 1 つしかありません。
-
gdb を使用して問題のプロセスにアタッチし、実行します。
- p dup2(open("/dev/null", 0), 1)
- p dup2(open("/dev/null", 0), 2) を実行します。
- デタッチ
- 終了
例
$ tail -f /var/log/lastlog &
[1] 5636
$ ls -l /proc/5636/fd
total 0
lrwx------ 1 myuser myuser 64 Feb 27 07:36 0 -> /dev/pts/0
lrwx------ 1 myuser myuser 64 Feb 27 07:36 1 -> /dev/pts/0
lrwx------ 1 myuser myuser 64 Feb 27 07:36 2 -> /dev/pts/0
lr-x------ 1 myuser myuser 64 Feb 27 07:36 3 -> /var/log/lastlog
$ gdb -p 5636
GNU gdb 6.8-debian
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Attaching to process 5636
Reading symbols from /usr/bin/tail...(no debugging symbols found)...done.
Reading symbols from /lib/librt.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/librt.so.1
Reading symbols from /lib/libc.so.6...(no debugging symbols found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/libpthread.so.0...(no debugging symbols found)...done.
[Thread debugging using libthread_db enabled]
[New Thread 0x7f3c8f5a66e0 (LWP 5636)]
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /lib/ld-linux-x86-64.so.2...(no debugging symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
(no debugging symbols found)
0x00007f3c8eec7b50 in nanosleep () from /lib/libc.so.6
(gdb) p dup2(open("/dev/null",0),1)
[Switching to Thread 0x7f3c8f5a66e0 (LWP 5636)]
$1 = 1
(gdb) p dup2(open("/dev/null",0),2)
$2 = 2
(gdb) detach
Detaching from program: /usr/bin/tail, process 5636
(gdb) quit
$ ls -l /proc/5636/fd
total 0
lrwx------ 1 myuser myuser 64 Feb 27 07:36 0 -> /dev/pts/0
lrwx------ 1 myuser myuser 64 Feb 27 07:36 1 -> /dev/null
lrwx------ 1 myuser myuser 64 Feb 27 07:36 2 -> /dev/null
lr-x------ 1 myuser myuser 64 Feb 27 07:36 3 -> /var/log/lastlog
lr-x------ 1 myuser myuser 64 Feb 27 07:36 4 -> /dev/null
lr-x------ 1 myuser myuser 64 Feb 27 07:36 5 -> /dev/null
も検討してみてください。
-
を使って
screen
新しい SSH/telnet/etc セッションを開くことなく、複数の仮想 TTY を切り替えられる画面です。 -
を使用して
nohup
これにより、...プロセスのバックグラウンドプロセスを失うことなくセッションを閉じたり開いたりすることができます。
関連
-
LinuxでPingを無効にする、または許可する設定方法
-
Linuxでファイルパーミッションを与えるには?Linuxでファイルに実行可能なパーミッションを追加するためのヒント
-
Linux Mint システムの背景画像を変更する方法は? Linuxでデスクトップの背景を変更するためのヒント
-
deepin20を使って、ドローイングボードで画像を開くには?deepinのお絵かき掲示板で画像を開く2つの方法
-
[解決済み] mkdirのオプションが明確でない
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] bashと正規表現を使って1行でプロセスを検索してkillする
-
[解決済み] 何が私のプロセスを殺したのか、なぜなのか?
-
[解決済み】STDOUTのn行目を取得するコマンド
-
[解決済み] スクリプトの同じ行で、stderrとstdoutを異なるファイルにリダイレクトするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Kali Linuxのマウスライトテーマを変更する方法は?マウスカーソルのテーマを変更するためのヒント
-
Centos7のインストールと展開無料のconfluence wikiの(知識ベース)詳細な操作手順
-
Linux Mintで入力メソッドを削除する方法は?Linux Mintで冗長な入力メソッドを削除するためのヒント
-
Linux Mintのシステムバージョン情報はどこにありますか? Linux Mint のシステム情報を見るためのヒント
-
deepin20を使って、ドローイングボードで画像を開くには?deepinのお絵かき掲示板で画像を開く2つの方法
-
Centos7 dns service named installation, encountered ** server can't find xxx.com: NXDOMAIN問題
-
[解決済み] Linuxでデータファイルから最初の列(実際には行名)を削除する方法は?
-
[解決済み] ワイルドカードマッチングに基づいて、現在のフォルダとサブフォルダ内のすべてのファイルを再帰的に検索するにはどうすればよいですか?
-
[解決済み] Bashでファイルの中身をループする
-
[解決済み] 既に実行中のプロセスの出力をリダイレクトする方法 [重複]。