Điều này có thể liên quan nhiều hơn đến việc phát hiện các hệ điều hành, nhưng tôi đặc biệt cần hệ thống init hiện đang sử dụng trên hệ thống.
Fedora 15 và Ubuntu hiện sử dụng systemd, Ubuntu đã từng sử dụng Upstart (mặc định thời gian dài cho đến 15.04), trong khi những người khác sử dụng các biến thể của System V.
Tôi có một ứng dụng mà tôi đang viết để trở thành một daemon đa nền tảng. Các tập lệnh init đang được tạo động dựa trên các tham số có thể được truyền vào cấu hình.
Những gì tôi muốn làm là chỉ tạo tập lệnh cho hệ thống init cụ thể mà họ đang sử dụng. Bằng cách này, tập lệnh cài đặt có thể được chạy một cách hợp lý mà không cần tham số là root và trình nền có thể được "cài đặt" tự động.
Đây là những gì tôi nghĩ ra:
- Tìm kiếm systemd, upstart, v.v. trong / bin
- So sánh / Proc / 1 / comm với systemd, upstart, v.v.
- Hỏi người dùng
Điều gì sẽ là cách chéo / nền tảng tốt nhất để làm điều này?
Loại liên quan, Tôi có thể phụ thuộc vào bash để chiếm đa số * nix hay là phụ thuộc vào phân phối / HĐH?
Nền tảng mục tiêu:
- hệ điều hành Mac
- Linux (tất cả các bản phân phối)
- BSD (tất cả các phiên bản)
- Solaris, Minix và * nix khác
ps -p 1 -o command
(in đường dẫn đến hiện tại init
). Trên Arch Linux và Fedora (IIRC), đó là một liên kết tượng trưng đến systemd
nhị phân (có thể giống nhau trên tất cả các systemd
hệ thống). Trên upstart
, init --help
sẽ in thông tin sử dụng, và trên hộp của tôi, upstart
được đề cập đến nơi nó nói ai sẽ gửi email. Trên FreeBSD (sysV), điều này sẽ trả về lỗi. Có thể có manh mối tương tự trên các hệ thống khác, nhưng kể từ khi đặt câu hỏi này, tôi đã quyết định chỉ tạo chúng cho tất cả các nền tảng và tạo các gói riêng biệt cho mỗi hệ thống.
sudo lsof -a -p 1 -d txt
có thể cho kết quả chính xác hơn nữa. ps
có thể in một tên tùy ý, trong khi với lsof
bạn sẽ có được đường dẫn thực thi thực sự. (Xem câu hỏi của tôi unix.stackexchange.com/questions/102453/... )