0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

シェルとターミナルの仕組みを触りだけ理解する!

Last updated at Posted at 2025-12-03

powershellはどういう仕組みで動いているか

この記事では、powershellはどのような技術/仕組みかについて自分の理解をまとめます。

ユーザー側のプロセスとして動作する

powershellはwindowsにもとから入っています。一見するとOSの機能に見えますが、そうではありません。ユーザープロセスとして動作します。1

タスクマネージャーを見るとすぐにわかります。
1204_3.jpg

powershell.exeは「アプリ」の欄にありますね。下の方にある「windowsプロセス」という欄がOS側のプロセスですので、powershellはユーザー側のプロセスということになります。
ここで気になるのは、windowsターミナル(wt.exe)の子プロセスになっている点です。powershell.exeをダブルクリックして立ち上げてもこのような状態になります。なぜでしょうか?
下図に従って説明していきます。
1204.png

立ち上げる時の仕組み

そもそもexeとは、PE形式の実行バイナリです。
PE形式のデータ構造の規格として、GUIアプリかCUIアプリかを表すデータを詰めることが決まっています。(参考:公式ドキュメント)
GUIアプリの場合、exeのなかに「これくらいの大きさの、こういうウィンドウをつくる」プログラムが記述してあります。それに従ってウィンドウをつくるという動作になります。
CUIアプリの場合、「hello, worldと表示」くらいのプログラムしかなく、ウィンドウをどう作ったらいいのかなどを管理するための命令がexeにありません。ですのでOS側でウィンドウを作るためwt.exeを立ち上げ、その子プロセスとしてCUIアプリを立ち上げます。
CUIアプリのウィンドウにフォーカスして文字を入力すると、入力された文字は一旦wt.exeが受け取った後hello_CUI.exeに渡します。こうしてCUIアプリは動いているわけです。
(絵からわかると思いますが、wt.exe自身はGUIアプリです)

補足:CUIアプリのウィンドウをつくるもう一つのソフト

windowsターミナル(wt.exe)のほかにも、同じような機能を持ったソフトがあります。windowsコマンドプロセッサ(conhost.exe)です。
この2つはターミナルと呼ばれるジャンルのソフトウェアで、CUIのウィンドウを作ったり背景の色を決めたりしています。
powershellはシェルと呼ばれるジャンルのソフトウェアで、ターミナルとシェルはよく混同されるみたいです。
また、CUIアプリを立ち上げる時にwindowsターミナルを使うのか、windowsコマンドプロセッサを使うのかはwindowsターミナルの設定から選べます。
1204_4.jpg

1204_5.jpg

conhost.exeのほうが機能が少ない分依存関係が少なく、安定して動作するようです。(例えばGPUドライバが死んでいるときにも動作するらしい)
ちなみに、windowsターミナルもwindowsコマンドプロセッサもオープンソースになっています。

src/hostがwindowsコマンドプロセッサ、src/terminalがwindowsターミナルのソースであるようです。こちらの内部まで調査した記事もいずれ書きたいと思っています。

まとめ

  • ユーザー空間のプロセスであり、ターミナルソフトの子プロセスとして動作する。
    最後までお読みいただきありがとうございました。
  1. プロセスとは何かについて、概要はわわわIT用語辞典をお読みください。参考:わわわIT用語辞典「プロセス」

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?