なぜ PS はスリープ プロセスを認識しないのでしょうか?

なぜ PS はスリープ プロセスを認識しないのでしょうか?

最初のターミナルを作成し、次に「sleep 1000 &」を使用し、「ps」で見つけました。問題は、2 番目のターミナルを作成し、「ps」を入力すると、スリープ プロセスがないことです。理由を知りたいです。

ここに画像の説明を入力してください(私の宿題には「ヒント:TTY列」と書いてありました)

答え1

デフォルトでは、ps現在の端末 (tty) に接続されているプロセスのみが表示されます。この場合、シェルとシェルps自体 (両方ともpts/2) が表示されます。 を表示するには、この制限を解除する必要がありますsleep。たとえば、

ps -e

man psプロセスをフィルタリングするために使用できる多くのオプションについては、を参照してください。

答え2

問題は、2 番目のターミナルを作成して「ps」と入力すると、sleepプロセスが存在しないことです。

いくつかの(すべてではない)対話型シェルでは、sleep 例えば次のようにシェル組み込み関数を呼び出すことができます。睡眠(3)cd シェルの組み込み関数が呼び出すのと全く同じですディレクトリ変更(2))。

そうなると、sleep プロセスなぜなら、何もないからです。睡眠(3)-ingはあなたのUnixシェル; 独自のシェルインタープリタを書くこともできます(サッシ簡単ですが、少しバグのある例です。

多くのLinuxシェルはオープンソースソフトウェア(またはフリーソフトウェア)、ソースコードを調べて、呼び出しているかどうかを確認してください。睡眠(3)または眠る(3)-あるいは適切に世論調査(2)など…- 参照時間(7)そして選択_tut(2)詳細はこちらシステムコール(2)そして、あなたのシェルによって行われたことを考えてください(またはそれらを観察してくださいstrace(1)またはltrace(1)またはデバッガー)。

多くのLinuxディストリビューションにはGNUバッシュ通常の対話型シェルとして。しかし、インストールすることもできます翻訳またはまたはesログインシェルとして(chsh(1))。

私の個人的な好みはzsh自動補完Debian の機能は優れています。

読んでみてください教科書についてオペレーティングシステム独自のコーディングUnixシェル練習として、または既存のものを拡張する(たとえば、sleep組み込みがない場合は追加する)などです。

関連情報