Używam NSTask do uruchomienia aplikacji pomocniczej. W 99% jeden z moich systemów klienckich działa dobrze, ale dwóch wróciło do mnie, informując mnie, że tak nie jest. Jeden z nich był na tyle miły, że pozwolił mi zajrzeć do problemu na zdalny pulpit.Subprocess NSTask utknął w _dyld_start
Próbowałem wiele różnych kombinacji NSPipe/NSFileHandle dla StandardOutput/StandardError, aby upewnić się, że problem nie jest związany z wypełnianiem tych buforów. Przykład 1 i 2. Domyślam się, że nie jest on związany, ponieważ działa dobrze na tak wielu systemach, a _dyld_start jest zbyt wcześnie w cyklu życia aplikacji, aby wypełnić StandardOutput/StandardError.
Inne uwagi o problemie:
- Uruchamianie aplikacji pomocnika z terminal działa poprawnie.
- Podłączanie i odłączanie GDB na proces zatrzymany i po-warto to działa dobrze, a kiedy skończył NSTask odbiera pracę po -waitUntilExit.
- Korzystanie fork (2) i execv (3) zamiast NSTask jest w stanie uruchomić i uruchomić pomocnika grzywny.
- Proces nadrzędny jest piaskowany, ale uważam, że poprzednie raporty nie były piaskowane w systemie Mac OS X 10.6/10.7.
Zrzut próbki procesowej z Activity Monitor:
Wszelkie wskazówki lub porady debugowania, aby dowiedzieć się, dlaczego pomocnik tkwi w _dyld_start są mile widziane!
Dlaczego publikujesz zdjęcia tekstowe? Skopiuj i wklej tekstowy przykładowy raport. Sprawdź również komunikaty dziennika konsoli. I sprawdź zmienne środowiskowe 'DYLD_ *'. –
Przekazywanie rekomendacji w celu sprawdzenia konsoli. Dla zmiennych środowiskowych 'DYLD_', zakładając, że nie ustawiasz ich samodzielnie, zajrzyj do ~/.MacOSX/environment.plist. –
Konsola nie ujawniła niczego. Sprawdzę 'DYLD_' przy następnym uzyskaniu dostępu do maszyny. – catlan