【Bash】Windows Subsystem for Linux【WSL】6
■ このスレッドは過去ログ倉庫に格納されています
WSL2アーキテクチャ
https://www.atmarkit.co.jp/ait/articles/1906/14/news019.html
WSL 2では、仮想マシン環境が起動し、bashがコマンドを受け付けるまで2秒程度という速度で起動できる。
このため、コマンドプロンプトなどからwsl.exeなどを使ってbashコマンドを処理する時間は、
現在のWSL 1とほとんど変わらない。また、本物のLinux実行環境であるため、
これまで正しく動作できなかったアプリケーション、例えばコンテナシステム(Dockerなど)や
ユーザーファイルシステム(FUSEなど)も動作させることができる。その上で、現在のWSL 1と同等の機能と使い勝手を実現するという。
WSL 2はWSL 1を置き換えずに併存する
WSL 2が登場したからといって、WSL 1は廃止になるわけではなく、引き続き利用可能である。
ファイル共有プロトコル「9P」でWSL 1との互換性を確保
このように、WSL 2とWin32環境の間のファイル共有は、どちらも9Pを使うことになる。
また、WSLからWin32プログラムを起動する「Win32相互運用性」では、最初にWSL側で、
実行ファイルを判別する必要がある。具体的には、実行ファイル先頭のマジックナンバー
(Win32ではMZ)を見て、LinuxのELF64か、Win32の実行ファイルなのかを判断する。
【Bash】Windows Subsystem for Linux【WSL】5
https://mao.5ch.net/test/read.cgi/linux/1553100855/ macosのforkが遅いのは以前からさんざんベンチ付きでいわれてたことだし、
windowsにfork相当がないことやwsl1のfork実装がmacosよりも遅いってのも
このスレでも既知のことでしょうに。
>>191は何を言いたかったのかわからない。
あなたが遅いと言ってるのはmacosのforkが遅いってことですよね?
理由は、自身が>>196で書いてる通り、macosのfork実装が悪いんでしょう。
wsl2の話にどうつながるんでしょうか? macosのforkが遅い,windowsにfork相当がないのはGUIソフトではforkは使わない
からなのか?
実はLinuxでもGUIソフトではforkは(ほとんど?)使っていないとか >>198
> wsl2の話にどうつながるんでしょうか?
WSL2では内部で仮想マシンを使ってるから、
Macで動かしたVirtualBox上のLinux相当のパフォーマンスになるよ
高速だね! >>174だけどfcitx-mozcは動いたもののibus-mozcが動かない
そもそもibus-daemonが起動しなくてググってみたけど有力な情報がなくて断念 Windowsでもntdll.dllにRtlCloneUserProcessっていうfork相当の関数があるんだけどね
https://www.google.co.jp/search?q=RtlCloneUserProcess http://k-takata.o.oo7.jp/diary/2014-09.html
> Vista 以降には、RtlCloneUserProcess という内部 API があるらしい。
Vista 以降・・・
内部API・・・ >>199
windowsがforkを用意しなかった理由については、いろんな考察があるから調べてみるといいと思う。
役に立たない知識が増えるだけですけど。
linuxでの基本的なプロセス生成は
1. 親プロセスでforkして
2. 子プロセスで新しいプログラムをexec
3. 親プロセスがwait
の流れで、これはGUIでも同じです。
pstreeで親子関係を視覚化できます。
linuxを半日つかっても、通常1万プロセス程度しか生成されませんし、
forkが遅いといったところで1回あたりマイクロ秒で終わるので、
forkが遅いだけならシェル芸やベンチマーク以外には影響ないです。 >>199
AndroidはGUIでforkを上手に活用しているよ
Google Chromeはタブごとにプロセスを起動しているみたいだけど、通常はWindowsでも
LinuxでもGUIアプリケーションは1個のプロセスとして実装するのが普通で、必要に
応じてアプリケーション内でスレッドを生成している
Androidは、一般的なWindow SystemのWindowに対応するActivityやダウンロード等の
バックグランド処理をするServiceを複数組み合わせて1つのアプリを構成するが、その
AcitivityやServiceはそれぞれ1個1個独立したプロセスとして実行される
例えば、アプリを起動して設定画面を出すとメインActivityと設定Activityで2個プロセスが
起動されるようになっていて、2回forkが実行される
スレッドの生成よりプロセスの生成にはコストがかかるが、Androidのシステムの中核である
Zygoteがforkとコピーオンライトを活用してプロセスを管理していて、高速にAcitiviyや
Serviceを起動できるようにしている
そのためforkのないWindows NTカーネルでAndroidシステムを直接実装するのは難しい
WSL1がWindows上でAndroidを動かすための仕組み由来なのはこういう理由なはず
ちなみにLinuxのプロセスモデルは、VMSやWindows NTのspawnモデルでもUnixのfork
モデルでもなくPlan9のrfork由来のcloneモデルなので、タスクの設計思想が根本的に違う >>203
内部APIはともかくVista以降の何が問題なの?
WSLスレでXPを考慮する必要もないでしょ Ruby on Rails 6 では、テストの並列実行ができるようになったが、
Linux, Mac では、fork でプロセスを起動するが、
Windows では、fork が無いので、スレッドを起動する
ワーカーがプロセスの場合は、データベース(DB)を作成してから実行するので、
他のプロセスのDBと競合しないが、
ワーカーがスレッドの場合は、同じDBを使うので競合する >>208
明らかにruby on railsのバグだなw ウインドウサブ死すテムとは?
JDがウイン10で使えるようになるの? WSL(に限らんけど)Ubuntuのレポジトリって国内のレポジトリにすると速くなるいがいにメリット何かある?
本家には入ってない日本向け/日本で人気あるアプリが登録されてるとか、そういう「日本向けローカライズ」みたいなのされてるかどうかってことなんだけど。
ぐぐっても「近場だからはやいよ」ってばっかりで内容について触れてるページが見当たらない・・・ そうったのが欲しいならサードパーティーリポジトリを追加するんだと思うけど ミラーの意味をわかってないのか
ちなみにUbuntuはミラーを使わないアホ対策に
デフォルトのリポジトリをわざとクソ遅くしてる アホらしい質問で申し訳ないんだが、cronってwslで動かない?
cron起動してログ有効にして */5 * * * * echo "hoge" ってしてんのにログすら吐いてくれない……
なんか書き方間違ってるかな >>215
動くよ
ディストリにも依るだろうけど、ログの出力がsyslog任せになってたりしない?
>> /tmp/hoge.txt とかをコマンドライン後ろに追加してみればいいんじゃない >>216
なるほど、ちょっとやってみよう
ありがとー いい話だな〜。みんなけなし合うんじゃなくて助け合おうよ。 Alpine WSLでユーザー名は設定できたんだけどrootもデフォルトユーザーもパスワード設定されなくてsuできないんだけど手順を間違えたんだろうか 「WSL 2」最大の課題であった“localhost”問題が解決 〜「Windows 10」Build 18945
https://forest.watch.impress.co.jp/docs/news/1198651.html
最大の課題だった模様 最大の課題っていうのは優先順位が高いという意味で
実現が困難という意味じゃないぞw >>223
コマンドプロンプトでwsl -d Alpine -u rootとか?
同じ事になったから今の所そういう作りのようだけど >>226
ありがとう、無事apk upgradeとapk addできたよ 好きな場所にimportして環境作れるな
ストアのいらんやん >>229
そのとおり。MacもiPhoneもAndroidも
アプリを実行するだけならストアはいらないんだよ 以前からwsldlというのがGitHubにあったな WSLはストアの無いサーバOSにも入るから、こんなのもあるよ
ttps://aka.ms/wsl-ubuntu-1804
他にも公開されてたはず >>232
おまえのせいで直リンク踏んで今月の通信量200MB使っちゃったやん
1日の使用量超過なんだけど?
この時代直リンク禁止とは言わないが直リンクなら先に言ってほしい 今パケ死っていうのか?
言ったとしてもギガ死とかでは? 火狐はダウンロードするかどうか聞いてくれたので回避余裕でした わざわざh抜きで貼ってくれてんのにクリックするアホのが悪いわw >>244
>>235か?
ブラクラにあっさり引っかかるタイプだなw どう考えても直臨はる馬鹿が悪いってことだね
自分は悪くない、とか言うつもりのようだけどブラクラ張るやつと同じ事やっててて「俺は悪くない」は通用しないよ
その程度もわからんバカは死んだほうが世の中のためだねw これが直リンク
https://google.co.jp
これは直リンクではない
ttps://google.co.jp
>>246
正真正銘のアホw >>248
× これが直リンク
○ これがリンク
https://google.co.jp
× これは直リンクではない
○ これはリンクではない
ttps://google.co.jp 黙ってりゃいいものをチョンみたいにファビョって恥ずかしい・・・w >>254
俺はお前のことが好きになった
ホワイトリストに復活させてやるよ 教えてくれ。
WSLでUbuntu16.04とVcXsrvの組み合わせで日本語入力ができない俺に
わかりやすい入門者向けサイトを教えてください。
今はVirtualBOXで共有フォルダ使ってるんだが重いんで、WSLに乗り換えたいんだが日本語入力で躓いた。 自分はDebianを使っているので参考にならないかもしれんが
WSLの場合日本語入力メソッドを自動起動してくれないので.profileなりで起動する必要がある
fcitx-autostart &> /dev/null
(uimの場合はuim-xim > /dev/null &)
dbusはその前に起動しておく必要がある
eval "$(dbus-launch --auto-syntax)"
もちろん環境変数のexportも必要
export DefaultIMModule=fcitx
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
なおWSLではibusは動かない模様
あとWSLを終了して再起動する場合Xサーバーも再起動する必要がある場合もある そういや9pプロトコルを使ったファイル共有
理論的には仮想マシンであっても実現できるはずだよな。
誰か解析して組み込んだりしてないんだろうか? 俺はGNOME3とfcitx-mozcを入れて環境変数をexportしておいて
gnome-terminalとfcitx-autostartを手動で起動して日本語入力やってる。
dbusはgnome-terminal起動すると勝手に動くっぽい。 Visual StudioからgdbデバッグするのためのWSL Ubuntu接続ができない。
sshではlocalhostに接続できているのにVisual Studio からはなぜか接続できず。
クロス プラットフォームのログは以下の通り。
15:49:04.6471074 [Info, Thread 1] liblinux.RemoteSystemBase: Connecting over SSH to localhost:50022
15:49:05.9111034 [Info, Thread 1] liblinux.IO.RemoteFileSystemImpl: Connecting over SFTP to localhost:50022
15:49:12.5031021 [Info, Thread 1] liblinux.Shell.CommonCommandBase: Command "cat /etc/os-release" finished with exit code 0 after 3787.2031ms
15:49:12.6341085 [Info, Thread 1] liblinux.Shell.CommonCommandBase: Command "uname -m" finished with exit code 0 after 127.3186ms
15:49:12.7731077 [Info, Thread 1] liblinux.Shell.CommonCommandBase: Command "uname -r" finished with exit code 0 after 136.2676ms
15:49:12.9251030 [Info, Thread 1] liblinux.Shell.CommonCommandBase: Command "g++ -v" finished with exit code 0 after 131.1446ms
15:49:13.9871022 [Info, Thread 1] liblinux.Shell.CommonCommandBase: Command "clang++ -v" finished with exit code 0 after 1060.3067ms
15:49:14.1331024 [Info, Thread 1] liblinux.Shell.CommonCommandBase: Command "gdbserver --version" finished with exit code 0 after 143.3295ms
15:49:25.5291022 [Info, Thread 1] liblinux.RemoteSystemBase: Disconnecting over SSH from "localhost:50022"
15:49:25.5421076 [Info, Thread 1] liblinux.IO.RemoteFileSystemImpl: Disconnecting over SFTP from localhost:50022
以下は /etc/rsyslog.conf で設定した/var/log/messagesのログ
Aug 25 15:07:28 xxxxxx dbus-daemon[3412]: [system] Activating service name='org.freedesktop.systemd1' requested by ':1.1' (uid=0 pid=3420 comm="/lib/systemd/systemd-logind ") (using servicehelper)
Aug 25 15:07:28 xxxxxx dbus-daemon[3412]: [system] Activated service 'org.freedesktop.systemd1' failed: Launch helper exited with unknown return code 1 ちなみにこのログでは ssh を50022番ポートにつないでいる。通常のsshクライアントを使って50022番ポートに接続できることを確認済み。 WSLに接続するのであればRemote-WSL使ったらダメなん? WSLは1と2どっちの方?
もう片方に変換するとどうなる? >>263,264
回答ありがとうございます。
私が使っている環境はVisual Studio 2019 Communityです。
メニューから「ツール→オプション→クロス プラットフォーム→接続マネージャー」と選んで、
「リモート システムへの接続」ダイアログで接続を試しています。
途中まで接続が上手くいっているかのようなログが出たあと、なぜか何も起きず、
仕方なくもう一回接続を試すと、「ホスト名」と「ポート」の2つのテキストボックスが赤枠になってしまいます。 >>265
回答ありがとうございます。。
WSL2はまだ入れておらず、WSL1のみで確認しました。
せっかくなのでWSL2を入れて試してみようかと思います。 失礼しました。
WSL2は2019年8月末現在、Windows Insider Preview Buildのみ対応らしいので、今回はWSL2への移行を見送ります。 WSLからXサーバ(GUI)に接続しようとして失敗してるんじゃない?
freedesktopってGUI関連の基盤だったと思うけど
WSL自体ではXサーバは起動出来ないからWin側とかにXサーバエミュレータ入れてそっちに振らないといけない >>261
コマンドプロンプトのwindowからpropertiesを開いて、
"Use Legacy Console"にチェックが入っていたら外す 回答ありがとうございます。
>>269
早速、VcXsrvを入れて試してみましたが、相変わらず接続不能でした。
上述のdbus関連ログは明示的に sudo service dbus restart を実行して以降に出るので、今回の問題はXサーバやdbusは直接関係ないかもしれません。
>>270
早速、コマンドプロンプトの設定を確認してみました。
「レガシ コンソールを使用する (再起動が必要で、すべてのコンソールに影響します)(&U)」はチェックが入っていない状態でした。 >>271
失礼、freedesktopのエラーは無視出来るね
dbusを落としてても上げてても、VS側の処理は続行出来る
WSLの構成とコマンドのバージョンチェックをした後にVS側から切ってるようだから、バージョンが想定してる範囲外とかかねぇ?
ちなみに接続出来た環境
OS:build 18965.1005(x64)
WSL:Ubuntu 18.04.02
VS:2019 Community 16.2.3
WSL2は同じ事するとlocalhost経由のsshが途中で切れる…まだまだだねぇ exfat-fuse使ってるけど遅いからな。これは嬉しい。 WSL1はこのままなくなるのかな
WSL2だと仮想マシンでHyper-V使ってるのか、泥エミュと競合しちゃう WSL 1 はどうなりますか。 破棄されますか。
https://docs.microsoft.com/ja-jp/windows/wsl/wsl2-faq#what-will-happen-to-wsl-1-will-it-be-abandoned
現在、WSL 1 を廃止する予定はありません。 WSL 1 と WSL 2 ディストリビューションを並行して実行し、任意のディストリビューションをいつでもアップグレードおよびダウングレードできます。 Xサーバと連携してLinuxデスクトップアプリを使用する場合はWSL1の方が使い勝手がいい。
WSL2だともたつく・・・ WSL2の場合、Xサーバとアプリはループバックのドメインソケットで接続でけんもんなぁ 今後リソースがさかれることはないだろうから、対応されなかったAPIは
今後も使えないだろうし、続くのではなく、残る(放置される)だけじゃね いずれ消されるんだろうなあ
面白い技術だから勿体ない気もするけど >>284
ネストは出来てたような?
と思ったらハイパーバイザープラットフォームに対応するのね 俺はもうWindowsでVirtualBoxは諦めてるんだが、
FreeBSDとかSolarisとかどうしてもVirtualBoxでしか動かせなくて
必要なときはMacを使ってる。
FreeBSDとかSolarisがHyperVでも動かせるなら良いんだけど
どうもうまく行かない。 動くならqemuでもいいよ。むしろqemuの方がOSの設定を
いじくり回さなそうなんで嬉しい。kvm-qemuじゃないほうね。
だけど動かす方法がわからん。オプションいっぱいあり過ぎだし試すのに時間がかかる。
一つだけでも良いから動く設定がわかればいいんだが qemuのフロントエンドはいくつかあるみたいだから、気に入ったものを使えばいい。 フロントエンドの有無はどうでもいいよw
あってもなくてもそんなの問題にならない
重要なのは動く設定
なにやっても途中でフリーズする 他のOSはLinuxやWindowsとはぜんぜん違うから
どんな設定でもそれなりに起動してくれるLinuxやWindowsとは違って
ろくに起動すらしない。何が原因かよくわからん。試行錯誤するにも時間がかかる。 Solarisはどれを動かそうとしてるかにもよるから何とも言えんけど、今時、FreeBSDなんてLinuxと大して変わらん感じでテキトーで動くだろ。
Hyper-Vでもqemuでも普通に入れたら普通に動くぞ。
Hyper-VはMSが公式に動くって言ってるし、Qemuは今、Windows10のサンドボックスで試したら、全部デフォルトで12が入った。
特殊な事しようとしてるんじゃなければ、簡単なはずなんだけど…
昔LinuxカーネルにFreeBSDのユーザーランド&Portsを入れて動かすとややってた人いたけど、今あるのかね?
あったら、WSL/FreeBSDもどきとか出来るんだろうか? Debian/kFreeBSDのこと?
いつの間にか消えたな・・・ php -r "echo is_dir('/mnt/m/\!Network/')?1:0;"
これどうやっても0になるんだけど、どうすりゃいいの?
\を増やしてもダメ
M:\!Network\ は実在してるフォルダ 普通に勘違いでした php側はエスケープ不要だった >>293
消えてはいない。stableもunstableもビルドはされてる
リリースに含まれなくなっただけ。Hurdも同様 悩まされてたバグがWindowsアップグレードしたら直ったから一応報告。WSLのストアからUbuntu入れて中身Gentooに入れ替えてClangでビルドしたZSH使ってたら、変数の中身が時々壊れると言うやっかいなバグが出てた。
検証コード:(for i in $(seq 1000000);do d=$(/usr/bin/dirname './abcdefghijklmnopqrstu/file0123456.jpg');if [ "$d" != './abcdefghijklmnopqrstu' ];then echo NG: $i $d;fi;done)
これで、数千回に1回NGがでて、dの中身が後ろ半分くらい(長さはその時のよってちがう)削除されて出力される。
KVMのGentoo+ZSHや、CygwinのZSHで問題なくて、WSLのGenntoo+bashでも問題ないし、環境が色々疑うべき個所が多すぎて、WSL以外ののバグだと思ってた。LTO付きでビルドすると、発生頻度が千回に1回位にあがるし。
で、今回Windows10を1803から1903に一気に上げたら、問題発生しなくなった。WSLイメージのアップグレードもしてないし、ZSHのリコンパイルもしてない。単純にWindows更新しただけなので、WSLのバグだったと思われる。
>>293
たぶんそれ。Linuxカーネル+FreeBSDランドじゃなくて、FreeBSDカーネル+Debianランドだったのか。記憶違いしてた。 元々LinuxはGNU(OS)の代替カーネルというポジションだけど
BSDカーネル+GNUユーザランドは幾つか実装例があったけど
Linux(GNU)カーネル+BSDユーザランドは本当に見ないね…見た記憶すら無い ■ このスレッドは過去ログ倉庫に格納されています