2016-09-21 18 views
0

다른 DYLD_ 속성을 실험 해보았습니다. jvm이 속성으로 조작하고 실행 중에 무시된다는 것을 발견했습니다.
내 자바 시험 :DYLD_PRINT_LIBRARIES가 작동하지 않습니다.

class Env { 
    public static void main(String... args) { 
     System.getenv().entrySet().stream().forEach(e -> System.out.println(e.getKey() + " = " + e.getValue())); 
    } 
} 

호출 : 다른 측면에서

$ export DYLD_PRINT_LIBRARIES=1 
$ export MY_PRINT_LIBRARIES=2 
$ javac Env.java && java Env|grep PRINT 
MY_PRINT_LIBRARIES = 2 
$ 

, 내 C 테스트 :

#include <stdio.h> 

int main(int argc, char **argv, char **envp) { 
    while (*envp) { 
     printf("%s\n", *envp); 
     envp++; 
    } 
    return 0; 
} 

호출 :

$ gcc env.c && ./a.out|grep PRINT 
dyld: loaded: /Users/okutane/test/java/./a.out 
dyld: loaded: /usr/lib/libSystem.B.dylib 
dyld: loaded: /usr/lib/system/libcache.dylib 
... 
dyld: loaded: /usr/lib/libc++.1.dylib 
dyld: loaded: /usr/lib/libDiagnosticMessagesClient.dylib 
MY_PRINT_LIBRARIES=2 
DYLD_PRINT_LIBRARIES=1 
$ 

나는 expec ted jvm test도 작동합니다. 해결 방법이 있습니까?

답변

2

SIP가 도입되면 DYLD_*과 일치하는 모든 환경 변수가 제한된 바이너리를 실행하기 전에 제거됩니다. 여기에는 사용하려는 바이너리가 포함됩니다.

$ ls -lOL /usr/bin/java 
-rwxr-xr-x 1 root wheel restricted,compressed 58560 Sep 7 06:41 /usr/bin/java*