ハングした TTY ポートのクリア

このハングしたポートのクリア例では、ハングした tty ポートが tty0 であると想定します。

この手順を完了するには、root 権限が必要です。

  1. 次のように入力して、現在、tty がプロセスを処理しているかどうか判別します。
    ps -lt tty0
    次のような結果が戻されます。
         F S UID   PID  PPID   C PRI NI ADDR    SZ    WCHAN    TTY  TIME CMD
    240001 S 202 22566  3608   0  60 20 781a   444 70201e44   tty0  0:00 ksh
    ここでのプロセス ID (PID) は 22566 です。 このプロセスを強制終了するには、次のように入力します。
    kill 22566
    コマンド ps -lt tty0を入力して、プロセスが正常にクリアされたことを確認します。 プロセスがまだ存在している場合は、次の例に示すように、kill コマンドに -9 フラグを追加します。
    注意: -9 オプションを使って slattach プロセスを kill しないこと。 slattach プロセスを -9 フラグを付けて強制終了すると、SLIP ロックが /etc/locks ファイル内に 残る可能性があります。 slattach のあと、クリーンアップのためにこのロック・ファイルを削除してください。
    kill -9 22566
  2. 次のように入力して、tty を使用しようとしているプロセスがあるか判別します。
    ps -ef | grep tty0
    注: ps -ef | grep tty コマンドが以下のようなものを返す場合、
    root 19050      1    0    Mar 06       -  0:00 /usr/sbin/getty /dev/tty
    この tty は正しいケーブルに接続されていません ("-" は、日付 (Mar 06) と時刻 (0:00) の間に表示される)。 この状況は、システム・ログイン・プロセス (getty) がこの tty をオープンしようとして 、RS-232 シグナルがデータ・キャリア検知 (DCD、Data Carrier Detect) の状態にならなかったために オープン・プロセスがハングしていることを示します。 この問題は、配線に正しい null モデム・アダプターを使用することで修正することができます。 getty が tty ポートをオープンできるときは、"-" の部分は tty 番号で置き換えられます。 ケーブルについて詳しくは、 適切なケーブルを使用したモデムの接続を参照してください。
    注: 以下のコマンドを使用して、 tty0でのログイン・プロセスを無効にすることができます。
    pdisable tty0

    プロセスが正常にクリアされても、まだ tty が応答しないようであれば、次のステップに進みます。

  3. 次のコマンドを入力します。
    fuser -k /dev/tty0
    これは、ポート上で実行中であることが分かったプロセスをクリアして、PID を表示します。 tty がまだ使用可能でなければ、次のステップに進みます。
  4. strreset コマンドを使用して、リモート・エンドへの接続が失われたために配信できないデータが原因でハングしたポートからの発信データをフラッシュします。
    注: strreset コマンドによってハングしたポートが修正された場合、リモート・エンドへの接続が失われるとバッファーに入れられたデータが自動的にフラッシュされるため、ポートにはケーブルまたは構成の問題があります。
    次のように入力して、まず、tty のメジャーおよびマイナー・デバイス番号を判別する必要があります。
    ls -al /dev/tty0
    次のような結果が表示されます。
    crw-rw-rw-    1 root     system    18,   0 Nov  7  06:19 /dev/tty0
    これは、tty0 のメジャー・デバイス番号が 18 で、マイナー・デバイス番号が 0 であることを示しています。 これらの番号は、strreset コマンドを使用するときに次のように指定します。
    /usr/sbin/strreset -M 18 -m 0
    tty がまだ使用可能でなければ、次のステップに進みます。
  5. 停止した tty ポートからケーブルを切り離し、それから再接続します。 AIX® は、Data Carrier Detect (DCD) シグナルを使用して、ポートに接続されたデバイスの存在を判別します。
    DCD をドロップし、ケーブルを切り離して再接続することによって、多くの場合、ハングしたプロセスをクリアできます。
    tty が構成されているポートの場所を判別するには、次のコマンドを入力します。
    lsdev -Cl tty0
    次のような結果が表示されます。
    tty0    Available   00-00-S1-00  Asynchronous Terminal
    この出力の 3 番目の列は、tty のロケーション・コードを示しています。 この例の S1 は、シリアル・ポートがネイティブ・シリアル・ポート 1 に構成されていることを示します。 ロケーション・コードの解釈について詳しくは、 オペレーティング・システムおよびデバイスの管理../devicemanagement/devloccodes.html を参照してください。

    tty がまだ使用可能でなければ、次のステップに進みます。

  6. stty-cxmaを使用してポートをフラッシュします。 次のように入力します。
    /usr/lbin/tty/stty-cxma flush tty0

    このコマンドは、8 ポートおよび 128 アダプターのポートに構成された tty 用です。 しかし、場合によっては、他の tty ポートを使用して、正常にフラッシュすることもできます。

    tty がまだ使用可能でなければ、次のステップに進みます。

  7. ハングした端末のキーボードで、 Ctrl キーを押したまま Qを押します。 これによって Xon 文字が送信され、中断されていた出力が再開されます。

    tty がまだ使用可能でなければ、次のステップに進みます。

  8. プログラムは、tty ポートをオープンし、属性をいくつか変更したあと、それらの属性を元の状態にリセットしないでクローズしてしまうことがあります。 これを訂正するために、tty を DEFINED 状態に下げ、次を入力して tty を使用可能にします。
    rmdev -l tty0
    このコマンドは、tty に関する情報をデータベースに残しますが、システム上で tty を使用不可にします。
    次のコマンドは、tty を再びアクティブ化します。
    mkdev -l tty0
    tty がまだ使用可能でなければ、システムがリブートできるようになるまで、デバイスを別のポートに移動して、その場所で tty を構成することを考えます。 リブートしてもポートがクリアされなければ、ほぼハードウェアの障害です。 次を入力して、ポートにハードウェア障害がないかエラー・レポートをチェックしてください。
    errpt -a | pg
これまでに挙げたコマンドの内、いくつかは機能せずに、デバイスが使用中であることを示すメソッド・エラーを戻すことがあります。 これは、プロセスが tty 上で実行中であるためです。 上記のステップのいずれもハングした tty を解放しない場合は、最後の手段として、 AIX システムをリブートし、カーネルをフラッシュしてプロセスが終了するようにします。