web-dev-qa-db-ja.com

プロンプトが表示される前に、どのプロセスが実行されていますか?

特定のサーバーにログインすると、次のように表示されます。

before ctrl+c

Last login: ...情報を取得しますが、プロンプトは表示されないことに注意してください。 Ctrl+Cを押して、その後だけプロンプトが表示されるので、以下のスクリーンショットのように、ユーザー名とパスワードが正しいことを証明します。

after ctrl+c

私は今朝からオフィスにあるWebサーバーでこの問題を抱えています。マシンのディスクが今日交換されたのは偶然ではありませんが、起こったのは古いディスクのクローンが作成され、システムの他のすべてのユーザーがこの問題を抱えていないことだけです。

誰かが何が起こっているのか知っていますか?

4
Matthew

シェル初期化ファイルの1つで何かに時間がかかっています。ログインシェルがbashの場合はset -xまたは~/.bash_profile(または~/.profile)の先頭に~/.bash_loginを追加するか、~/.zprofileおよび~/.zloginおよび~/.zshrczshの場合。このようにして、シェルは実行する前に各コマンドを出力します。その後、set +xを実行して、トレースをオフにします。

コマンドは、システム全体の初期化スクリプト/etc/profileから呼び出されるコマンドである可能性があります。そのファイルを変更できないが、その機能を確認する必要がある場合は、トレースをオンにしてログインシェルを実行します。 bash --login -x

もう1つのアプローチは、もう一度ログインして、psやその他のツールで何が起こっているかを監視することです。 Linuxの場合、ps xはすべてのプロセスを表示します(プレーンなpsは現在のターミナルで実行されていることのみを示し、ここでは役に立ちません)。 ps -t pts/42は、端末/dev/pts/42で実行されているプロセスに制限します(2番目のセッションの端末を判別するには、最初にps xを実行する必要があります)。

シェルをハングさせているプロセスを強制終了する代わりに、Ctrl + Zでシェルを停止してから、jobsコマンドを使用してシェルが何であるかを確認してください。

1
Nykakin

$ HOME/.bashrc、$ HOME/.profileのいずれかで実行されているコマンドが、正しくバックグラウンド化されていないか、ユーザーからの入力を待っている可能性があります。まず、これら2つのファイルを見てみましょう。

そこに何も表示されない場合は、これらのファイル、/ etc/bashrc、/ etc/profile、およびディレクトリ/etc/profile.d/*内のファイルに相当するシステムを調べます。おそらく、sysadminである誰かが、ログイン時に実行しようとしているシステムレベルのファイルに何かを追加しました。

1
slm