Windows 7で setup-x86_64.exe ツール(バージョン2.873)を使用してcygwinを更新しました。いくつかの追加パッケージ(主にZip/unzipなど)をインストールする必要がありました。
それ以来、Cygwinターミナルを実行しようとすると次のエラーが表示されます(ショートカットはC:\ cygwin64\bin\mintty.exe -i /Cygwin-Terminal.icoを指します)。
Error: could not fork child process: Resource temporarily unavailable.
DLL rebasing may be required. See 'rebaseall / rebase --help'.
メッセージでアドバイスされているrebaseallコマンドの実行方法をオンラインで検索しました。基本的に、cygwin/bin/dash.exeを起動して実行することをお勧めします。bin/rebaseall
それを数回行いましたが、-vコメントも使用しましたが、エラーは戻りません。それでも、cygwinを起動できません。
また、cygwin-x/XWin-serverを実行しても何も起こりません。
cygwin/var/log/setup.log
のセットアップログを確認しましたが、エラーは表示されません。
すでに持っていたパッケージのいくつかを再インストールするために、セットアッププログラムをさらに数回実行しようとしましたが、どちらも助けにはなりませんでした。どのようにそれを機能させることができますか?
私の同僚の1人は、SourceTree(Mingw32)からターミナルを開くときに同様のエラーがあり、pull
、rebase
など(ローカルではないもの)をしようとするとエラーが発生しました。彼はSourcetreeをアンインストールし、CCleanerを使用してレジストリをクリーンアップし(これが必要かどうかはわかりません)、Sourcetreeを再起動してインストールしました。
私はこれがOPで説明されている問題とわずかに異なることを知っていますが、それはレジストリのアンインストール/再インストールとクリーニングによって解決できる可能性があり、これはSourcetree問題でこの質問を見つける将来の人々にも役立つかもしれません(私がしたように) 。
編集: 別の同僚にも問題があり、アンインストール/再インストールまたはCCleanerを使用せずに再起動するだけで問題を修正できました。
から https://chromium.googlesource.com/chromium/src/+/master/docs/cygwin_dll_remapping_failure.md
Cygwinが制御できないDLLは、cygwinがライブラリ用に選択した場所のcygwinプロセスにマップされる場合があります。これは主にアンチウイルスDLLで見られます。これが発生した場合、リベース中にcygwinに指示して、DLLがマップされるメモリ領域を回避する必要があります。
この背景については、 http://www.dont-panic.cc/capi/2007/10/29/git-svn-fails-with-fatal-error-unable-で入手できますto-remap /
UNIXのフォークセマンティクス(おそらく)のため、cygwinライブラリは、フォークの親と子の両方の同じ場所にマッピングする必要があります。すべてのcygwinライブラリには、プロセスアドレス空間のどこにマップすべきかについてのヒントがあります。これらのヒントに従えば、各ライブラリは両方のアドレススペースの同じ場所にマッピングされます。ただし、Windowsは、アドレス空間の任意の場所にDLL; DLL $ ===をマッピングします。ヒントは制御と見なされません。cygwinプロセスが開始され、そのライブラリの1つがヒントで指定された場所。
/ usr/bin/rebaseallは、すべてのcygwinライブラリのDLLヒントを変更し、ライブラリ間の競合が発生しないようにします。これは、このプロセスは、Cygwin内の競合がないことを確認しますが、Cygwinプロセスのアドレス空間にある外部DLL(アンチウイルスDLLなど)との競合に対処することはできません。
このケースを処理するには、問題のある非cygwinライブラリが何であるか、アドレス空間のどこにあるかを把握し、cygwinヒントがライブラリをその場所にマップしないようにすべてリベースする必要があります。
ash /usr/bin/rebaseall -b <base address>
(このコマンドは-v
フラグDLLレイアウト)を表示する場合。これで問題が解決するはずです。
低すぎるベースアドレスを選択すると、cygwinのインストールが破損する可能性があります。 cygwinのsetup.exeを再度実行し、パッケージ選択ページで[すべて]エントリをクリックして再インストールすると、再インストールできます。最初の再インストールパスでエラーが発生する可能性があるため、これを2回行う必要があります。
これが修正です。
また、同じフォルダーからこれらの他のバイナリーを追加します:expr.exe、uname.exe、grep.exe、rm.exe
幸運を、
ガブリエル
私は最近、同様の問題に苦しんでいます。最新のWindows7パッチまたは最新のcygwinの更新が原因であるかどうかにかかわらず、原因を特定できませんでした。私は厳しく管理された企業環境にいますが、昇格した権限は限られ、マルウェア対策や暗号化されたドライブがたくさんあります。現在、32ビットのCygwinを使用しています。
私にとっての問題は、GitおよびGit-Svnパッケージをインストールした後に始まりました。これにはPerlが必要で、他のさまざまなCygwinパッケージもアップグレードされました。
Rebase-triggerまたはrebaseallを使用してリベースしても問題は解決しませんでした。また、再インストールとセットアップは、リベース自体を実行しようとしたときに、インストール後のフェーズで繰り返しエラーを発生しませんでした。
私の最初の成功は、Perlを以前のバージョンにダウングレードすることでした。 5.22.2.1から5.22.1.2まで。数週間後、おそらく強制的なウィンドウの更新と再起動後にエラーが返されました。
私の最新の成功は、dash/rebaseallスクリプトを無視し、rebase.exeを次のように直接実行することで達成されました。
$ cd /bin $ ls -1 *.dll | egrep -v '(cygwin1|cyglsa).*\.dll' >rebasedlls.txt
cygpath -wa /bin
のwindowsディレクトリ)のWindowsパスに変更します。C:\apps\cygwin\bin> rebase.exe --info cygwin1.dll /usr/bin/cygwin1.dll base 0x61000000 size 0x00500000
C:\apps\cygwin\bin> rebase -b 0x62000000 -4 -n -v -t -T rebasedlls.txt
これまでのところ、非常に良いことですが、私のCygwinは再び稼働状態に戻りました。
このまったく同じエラーメッセージにはさまざまな原因がありますが、すべてがsetup-x86_64.exeに関連しているわけではありませんが、そのコンテキストでも見ました。しかし、rebaseallで問題が解決しなかった場合、ここで提案する方法が有効かもしれません。
今朝見たケースでは、minttyターミナルエミュレータを終了した後も実行を続けていたプロセスがいくつかあったことが原因であることが判明しました。私の考えでは、これらのゾンビプロセスはコンソールのリサイクルを妨げます。私の場合、2つのプロセスは、不要になった浮遊プロセスの実行中プロセスのリストを確認することにより、実験的に決定されました。実行中のタスクのリストを確認することで、私をブロックしている2つのプロセスを見つけました。
C:\WINDOWS\system32>tasklist | grep Console
CobraWinLDTP.exe 31844 Console 1 43,600 K
geckodriver.exe 52640 Console 1 32,164 K
C:\WINDOWS\system32>taskkill /F /PID 31844
SUCCESS: The process with PID 31844 has been terminated.
C:\WINDOWS\system32>taskkill /F /PID 52640
SUCCESS: The process with PID 52640 has been terminated.
他のいくつかのstackoverflowの質問で、gitは多くの場合、この症状を引き起こすゾンビプロセスであることがわかりました(一部のユーザーにとって)。残念ながら、コンソールセッションが閉じられた後に残るプロセスはこの問題を引き起こす可能性があるため、実験する必要があります。
3回再起動しましたが、その後は問題ありませんでした。 wtf Windows 7
それをアンインストールし、32ビット用のソフトウェアをインストールします。
セットアップ後フェーズとしてリベースをトリガーするリベースユーティリティがあります。
ダッシュまたはバッシュから:
/usr/bin/rebase-trigger full
すべてのプロセスを閉じて、setup-x86_64.exeを再度実行します。