追加読書

追加読書

そうかはわからないけど」シングルユーザーモード「は正しい用語ですが、私は次のようになります。

GRUBメニューでEEdit Run Configurationを押しました。で始まる行にlinux以下を追加しました。

rw init=/bin/bash

そしてを押してくださいF10。コンピュータはパスワードを要求せずにルートシェルから起動します。

問題は、信号が機能しないことです。たとえば、コマンドを実行するときにCtrl+を押してコマンドを終了することはできませんC

これが期待されるか。では、なぜそうなのでしょうか?この問題をどのように解決できますか?シングルユーザーモードの端末エミュレータに関連していますか?

答え1

長い間、シングルユーザーモードは正しい用語ではありませんでした。 1990年代にはそうだった。シングルユーザーモードに分けて緊急モードそして構造モード。実際、あなたはそれらのどれも使用しません。

実際に実行していることは、プロセス#1が実際に実行する必要があるタスクを実行するように設計されていないプロセス#1でプログラムを実行することに関連しているため、悪い考えです。緊急モードまたは救助モードを使用する方が良いです。後者は以下から構成される。承諾しました答えは、あなたが指す答えが指すものです。

はい、信号は奇妙に動作します。まず、プロセス#1には信号の特別な意味があり、init=/bin/bashこれが悪い考えであるいくつかの理由の1つです。さらに、ジョブ制御シェルは、/dev/consoleBourne Again シェルなどの制御端末と適切なセッションを確立しないと、標準 I/O でジョブ制御を実行できません。実は君に言った一度起動しました。

いくつかの簡単なチェーンローディングツールを使用して制御端末と適切なセッションを確立することで、ジョブ制御を有効にし、信号をフォアグラウンドプロセスグループに渡すことができますが、これはすべての問題を解決するわけではありません。その他/bin/bash明示的かつ慎重に手動で実行する必要があるため、プロセス#1プログラムで問題になります。

救助モードまたは緊急モードを使用してください。

追加読書

答え2

他の人が述べたように、/dev/consoleタスク制御を制限する実際のttyとして常に機能するわけではありません。

しかし、実際には単にシェルを起動することができますはいttyに接続...

/usr/bin/setsid /bin/bash -ilm <> /dev/tty9 >&0 2>&0 &

...次に、alt-F9タスク制御を有効にして新しいシェルを実行する必要があるVT#9に切り替えをクリックします。 (まだ使用していないVTを選択できます。上記の3つ9をすべて使用したい値に変更するだけです。)

また、PID 1を持つシェルは、すべての孤児プロセスから継承されるという意味です。ほとんどのシェルは実行シェル自体を呼び出す前に子プロセスの作成を処理できる必要があるため、これを処理できますが、execve一部は混乱を招く可能性があります。SIGCHLDシェルを呼び出すときにそれを無視するなど、奇妙なことをしてください。私の考えでは、彼らには優れた子供たちがいないと思います。このような場合は、他のシェルで作業している間は実行を続けると便利です。

while : ; do wait ; done

関連情報