다시 이곳 어딘가에 피난처가 생겼습니다.

EI 오류설명 - fork() 관련

ink | 에러처리 | 조회 수 120 | 2017.06.18. 01:01

http://www.touhouinside.com/index.php?mid=board_UAjN22&document_srl=372795

 

이글을 비롯해서 fork() 에러가 뜨는 경우 해당함.

 

원인을 설명해주면 경로문제도 아니고 권한문제도 아님. 위 글 작성자가 D드라이브 루트에 옮겼다고 성공한건 순전 운빨임.

 

 

일단 원인 설명하면 시그윈 자체 한계임. 시그윈이란 놈 역할은 유닉스환경을 윈도우에서 에뮬레이션 하는거임.

EI는 유닉스 쪽 프로그램 몇개가 필요해서 (파이썬이랑 인코딩변환 기능 등등) 시그윈을 갖다 씀.

 

 

근데 이게 결국 유닉스를 윈도우에서 에뮬레이션 하나보니 유닉스와 윈도우가 달라서 100% 성공하지 못하는 게 몇 가지 좀 있음.

그중 하나가 (겁나 치명적이긴 한데) "프로그램의 실행"이 100% 성공하지 못함.

 

이건 윈도우랑 유닉스의 프로그램 실행 방식이 근본적으로 다르기 때문.

A 프로그램이 C.exe라는 프로그램을 실행하고자 한다 치자.

윈도우에서는 프로그램을 실행할때는 C.exe 파일이 그냥 바로 새 프로그램 (C)로 실행됨.

유닉스에서는 1) 먼저 프로그램을 실행하고자 하는 프로그램 (A)이 자기 자신을 고스란히 하나 더 복제함. (A -> B)

                      B의 내용물은 A.exe 그대로임.

                   2) 그 복제된 프로그램 (B)이 새로 실행될 C.exe 파일의 내용으로 스스로를 덮어씀.

                       쉽게 말해 매트릭스의 스미스요원처럼 덮어씌워진다 생각하면됨. 그럼 A (A.exe)랑 B (C.exe)가 남는거임.

 

유닉스쪽이 겁나 비효율적인 것처럼 보이는데 공돌이들 입장에선 사실 저게 나름 다 장점이 있어서 하는 짓임.

그런 시시콜콜한 얘기는 넘어가고.

 

여튼 시그윈은 유닉스 환경 기능을 제공하려고 하다보니 1)/2) 과정까지 다 만들어야 함. 아니면 유닉스 프로그램들이 안돌아감.

근데 이게 기술적으로 윈도우가 지원 안하는 부분이라 겁나 어려운 부분이다.

특히 1)의 복제는 프로그램의 메모리를 100% 똑같이 복제해야 하기 때문에 존나 개노가다를 해야하고,

설상가상으로 복제할 때 같이 로딩되는 DLL들이 간혹 원본(A)에서 로딩된 주소와 다른 곳에 기어들어가는 경우가 있음.

비유하자면 여자를 복제해놓고는 좆을 다른구멍에 집어넣는 거임. 그럼 복제과정은 좆망임.

 

그래서 복제 실패했다고 (fork failed) 징징거리는거임.

이건 개노가다 여부를 떠나 순전히 윈도우한테 의존하는 하는 부분이라 피할수가 없음. 걍 되냐 마냐가 기본적으로는 운빨임.

 

이걸 피하려면 순전히 DLL이 딴주소로 들어가는 확률을 낮춰야 하는데, 하나는 상시 로딩되는 DLL 들 (AV들, 드라이버 DLL들 등등)이 메모리를 휘젓지 못하도록 하는거고, 하나는 EXE 구조를 바꿔서 가능성을 낮추는거임.

 

얼마나 도움된다고는 말 못하겠는데 둘다 어느정도 도움은 됨.

 

- 원인의 기술적 설명은 https://cygwin.com/faq/faq.html#faq.using.fixing-fork-failures,

- 공식적으로 완화하는 방법 1: BLODA (메모리 휘젓고 다니는 프로그램) 끄기. https://cygwin.com/faq/faq.html#faq.using.bloda

- 공식적으로 완화하는 방법 2: Rebase 수행해서 메모리 주소 충돌 최대한 회피할것. http://cygwin.wikia.com/wiki/Rebaseall

 

결론: 윗글 작성자는 디렉토리 옮긴후 순전히 운빨로 DLL이 메모리에서 제자리에 테트리스마냥 꼭꼭 박혀서 실행된거임. 혹시 나중에 똑같은 증상 나오려면 제대로 고치려면 위 링크보고 고치셈 (영어주의)

 

 

 

 

제작자의 입장에서 이런 병신같은 cygwin으로 EI를 짜서 미안한데 어쩔수가 없었다.

그렇다고 솔까말 wget iconv patchutils 같은 걸 윈도우로 포팅하는건 미친짓이었거든.

  • |
facebook twitter google plus pinterest kakao story band
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
말 던지기전에 10초만 고민하고, 자기가 쓴 글을 다시 한번만 읽어보셈.
그 10초가 다음 대화의 방향을 크게 바꿀 수 있을지도 모름.
ink at 2017.06.18. 01:11

그리고 사족인데 질문자들 너무 죄인스탠스로 몰아가는거 아니냐.

 

거지같은 질문자들 많은거 잘 알긴하는데 저사람 글 내용이 제목에 "죄송합니다!!!" 붙여가면서 적을만한 건 아닌데말야.

ㅇㄹ at 2017.06.18. 14:42

그러게 에라판에 질문하면 저렇게 쩔쩔매진 않아도 될텐데 말이지

 

근데 WSL로 하면 안됨? cygwin없으면 불편하나

ink at 2017.06.21. 03:02

윈10은 커녕 간혹 xp 스샷도 올라오는 곳임.

ㅇㄹ at 2017.06.21. 14:58

안에서 powershell 쓰더만 결국 8이상 아니면 안돌아가는거 아니냐

ink at 2017.06.21. 22:40

파워셸은 xp용 있음. 7은 디폴트로 있던걸로 기억.

루프 at 2017.06.18. 13:39

d드라이브에 들어가서 돌아간건 거의 운빨이었던가요 ㅎㄷ

뭔가 파일명이 길어서 깨진걸로만 알았는데

번호 분류 제목 날짜 글쓴이 최근 수정일 조회 수
공지 에러가 발생하면 댓글로 달지 말아주세요 [4] 17.04.13. ㅇㄹ 17.05.24. 1120
공지 eraTHYMKR 20170622 [30] 17.01.01. ㅇㄹ 17.06.22. 18226
공지 공지사항 [7] 16.03.22. TUNA 17.05.19. 12494
1277 질문 메가텐 질문입니다 new 22:19 ㅁㅁ 22:19 4
1276 개별팩 [GVT] [0.341] [완번] SYSTEM_ENDING.ERB [1] newfile 21:35 ㅇㄹ 21:36 26
1275 통합팩 eraGVT 0.341 newfile 18:18 ㅇㅇ 18:18 93
1274 팁, 정보 (메가텐) 타마모,,,,이,,,,쉬뿔,,,,요망한,,,뇬,,,,~~~ [2] new 15:03 ㅇㅇ 21:37 128
1273 개별팩 (YM)현 시점까지의 갱신판 수정한것+환상향의 왕 모드 통합본. [3] file 17.06.22. 모스부호 01:09 404
1272 질문 메가텐 리세 관련질문인데 [3] 17.06.21. ㅇㅇ 17.06.22. 278
1271 질문 메가텐 총 데미지 지혜비례 맞음? [4] 17.06.20. ㄹㄹ 17.06.21. 323
1270 에러발생 인스톨러 되는사람 없지않나 [3] 17.06.20. ELdyd 17.06.20. 248
1269 개발정보 eraSumireTeru 관련 정보 [1] 17.06.19. ㅇㄹ 17.06.19. 514
1268 질문 ㅇㄹ님 ezemuera 질문 [2] 17.06.19. 판데모니움 17.06.20. 230
1267 질문 ym 매춘 질문입니다 [2] 17.06.19. 으어엌 17.06.19. 209
1266 원본 밑에 올라온거 원본 링크 [3] 17.06.19. ㄱㄷ 17.06.19. 438
1265 질문 에라 올리려면 어캐해야되냐? [2] 17.06.19. 세미 17.06.19. 276
1264 질문 에라마왕 용사 인원 제한 [1] 17.06.18. 도감 17.06.18. 244
1263 원본 eraGVT_別人改造版0.351 [5] file 17.06.18. 느어억 17.06.20. 481
1262 팁, 정보 [시발후방주의]에라.jpg [13] file 17.06.18. 느어억 17.06.21. 1104
1261 질문 에라연희 0,821]여러가지 오류 해결책 질문합니다. [2] file 17.06.18. 고불고불 17.06.19. 113
» 에러처리 EI 오류설명 - fork() 관련 [7] 17.06.18. ink 17.06.22. 120
1259 개발현황 EraAndroid 내렸습니다 [1] 17.06.17. ㅇㄹ 17.06.18. 462
1258 질문 [메가텐] 설치 방법을 정말로 모르겠습니다!!! 죄송합니다!!! [10] file 17.06.17. 루프 17.06.18. 419

채팅창 팝업버튼