Câu trả lời:
Không có cách nào để làm điều này, "launchd" là quy trình tổng thể, tương đương với "init" trong các hệ thống unix khác, cách duy nhất trong bất kỳ trình nền nào khác là thực hiện một số loại kill -HUP để tải lại các tệp cấu hình, v.v. nhưng hoạt động này không được phép trên launchd. Nếu bạn tra cứu nó trong bảng quy trình thì đó là quy trình số 1, mọi quy trình khác hiện đang chạy đều theo cách nào đó là con của nó, vì vậy khởi động lại là cách duy nhất để đạt được điều này. Bạn có thể có thêm may mắn trong việc thiết lập các biến môi trường đó trong một khu vực khác có xu hướng cho phép khởi động lại.
Dans-iMac:etc stuffe$ ps -ef | grep launchd | grep -v grep
0 1 0 0 9:40am ?? 0:09.47 /sbin/launchd
65 18 1 0 9:40am ?? 1:53.64 /usr/sbin/mDNSResponder -launchd
213 73 1 0 9:41am ?? 0:02.55 /System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/Resources/usbmuxd -launchd
0 85 1 0 9:41am ?? 0:00.08 /System/Library/CoreServices/ODSAgent.app/Contents/MacOS/ODSAgent -launchd
89 230 1 0 9:41am ?? 0:00.01 /sbin/launchd
501 238 1 0 9:41am ?? 0:00.23 /sbin/launchd
501 933 238 0 10:53am ?? 0:00.01 /System/Library/CoreServices/AirPort Base Station Agent.app/Contents/MacOS/AirPort Base Station Agent -launchd -allowquit
BIÊN TẬP:
Tất nhiên, thiếu giải pháp rõ ràng là bạn có thể thêm các biến có liên quan vào tệp cấu hình, sau đó chỉ cần chạy các lệnh theo cách thủ công để thoát khỏi nhu cầu khởi động lại, không có gì mà chỉ các chương trình mới bắt đầu sẽ tính đến mọi thay đổi. Tôi tìm thấy này trang mà giải thích nó một cách chi tiết hơn:
Các biến môi trường được đặt trong launchd sẽ có sẵn cho tất cả các chương trình trên hệ thống. Tuy nhiên, vì $ HOME / .launchd.conf không được hỗ trợ, phương pháp này chỉ được sử dụng cho các biến môi trường toàn cầu.
Tệp /etc/launchd.conf chứa danh sách các lệnh sẽ được chạy bởi launchctl trong khi khởi động. Tuy nhiên, các biến môi trường được đặt trong /etc/launchd.conf không thể có khoảng trắng và không thể tham chiếu các biến môi trường khác; launchctl khi chạy trong Terminal không chịu những hạn chế này. Xin lưu ý rằng /etc/launchd.conf không tồn tại theo mặc định, vì vậy chúng tôi sẽ cần tạo nó.
Việc khởi động lại là cần thiết để tải nội dung của /etc/launchd.conf. Tuy nhiên, nếu bạn đã chạy launchctlcommands tương ứng trong Terminal, bạn có thể giảm bớt nhu cầu khởi động lại. Chỉ cần nhớ rằng nếu bạn chỉ thực hiện các lệnh launchctl và không đặt các mục trong /etc/launchd.conf, nó sẽ không tồn tại sau khi khởi động lại.
Nếu bạn muốn có một biến môi trường toàn hệ thống sử dụng khoảng trắng hoặc phụ thuộc vào biến môi trường khác, bạn có thể đặt các lệnh launchctl vào một trong các tệp mà Terminal đọc. Bạn sẽ phải thoát và khởi chạy lại Terminal để truy cập các biến mới được đặt.
Có, bạn có thể sử dụng launchctl để thêm chúng cho bạn.
ví dụ từ thiết bị đầu cuối:
grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
đầu ra trên máy của tôi:
launchctl setenv _JAVA_OPTIONS -Djava.net.preferIPv4Stack=true
launchctl setenv JMETER_HOME /Applications/apache-jmeter-2.10
lauchctl setenv GRADLE_HOME /usr/local/gradle-2.0
Sau đó, bạn có thể khởi động lại bất cứ ứng dụng nào cần nó tạo thành spotlight