it-swarm-vi.com

Pid và khóa tập tin để làm gì?

Tôi thường thấy rằng các chương trình chỉ định pid và khóa các tập tin. Và tôi không chắc chắn những gì họ làm.

Ví dụ: khi biên dịch nginx:

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

Ai đó có thể làm sáng tỏ về điều này?

80
Stann

tập tin pid được viết bởi một số chương trình để ghi lại ID tiến trình của chúng trong khi chúng đang bắt đầu. Điều này có nhiều mục đích:

  • Đó là một tín hiệu cho các quá trình và người dùng khác của hệ thống rằng chương trình cụ thể đó đang chạy hoặc ít nhất đã bắt đầu thành công.
  • Nó cho phép một người viết một tập lệnh thực sự dễ dàng để kiểm tra xem nó có đang chạy hay không và đưa ra lệnh kill đơn giản nếu ai đó muốn kết thúc nó.
  • Đó là một cách rẻ tiền để một chương trình xem liệu một phiên bản chạy trước đó của nó không thoát thành công.

Tất nhiên, sự hiện diện của tệp pid không đảm bảo rằng id quá trình cụ thể đó đang chạy, tất nhiên, vì vậy phương pháp này không thể đánh lừa 100% nhưng "đủ tốt" trong nhiều trường hợp. Kiểm tra xem một PID cụ thể có tồn tại trong bảng quy trình không hoàn toàn di động trên các hệ điều hành giống như UNIX trừ khi bạn muốn phụ thuộc vào tiện ích ps, có thể không muốn gọi trong mọi trường hợp (và tôi tin rằng một số hệ điều hành giống như UNIX triển khai ps dù sao đi nữa).

Các tệp khóa được các chương trình sử dụng để đảm bảo hai trường hợp riêng biệt (hoạt động tốt) của một chương trình, có thể đang chạy đồng thời trên một hệ thống, không truy cập cùng lúc một thứ khác. Ý tưởng là trước khi chương trình truy cập vào tài nguyên của nó, nó sẽ kiểm tra sự hiện diện của tệp khóa và nếu tệp khóa tồn tại, có thể xảy ra lỗi hoặc đợi nó biến mất. Khi nó không tồn tại, chương trình muốn "thu nhận" tài nguyên tạo tệp và sau đó các trường hợp khác có thể gặp sau này sẽ chờ quá trình này được thực hiện với nó. Tất nhiên, điều này giả định chương trình "có được" khóa thực tế giải phóng nó và không quên xóa tệp khóa.

Điều này hoạt động vì hệ thống tệp trong tất cả các hệ điều hành giống như UNIX thi hành tuần tự hóa, có nghĩa là chỉ một thay đổi đối với hệ thống tệp thực sự xảy ra tại bất kỳ thời điểm nào. Sắp xếp giống như khóa với cơ sở dữ liệu và như vậy.

90
LawrenceC

Các tệp này thường được sử dụng bởi trình nền chỉ nên chạy một lần trên hệ thống. Tệp PID thường chứa số ID tiến trình của chương trình đã khởi chạy và đang chạy nếu có. Ngoài ra, khi nó khởi động, nó tạo tập tin khóa. Miễn là tệp khóa tồn tại, nó sẽ không bắt đầu một tệp khác mà không có sự can thiệp của người dùng. Nếu tệp khóa tồn tại và id quá trình được đề cập trong tệp pid không chạy, daemon được coi là ở trạng thái "chết", có nghĩa là nó được chạy nhưng có lẽ không phải do sự cố hoặc tắt máy không đúng cách . Điều này có thể bắt đầu một kịch bản khởi động/khởi động lại đặc biệt cho một số chương trình. Tắt nó đúng cách sẽ loại bỏ các tập tin khóa.

14
Caleb

Một tệp PID sẽ chứa ID tiến trình của một quy trình đang chạy. Điều này có nhiều cách sử dụng khác nhau; bạn có thể đọc nó và kiểm tra xem tiến trình có còn chạy không và thực hiện hành động thích hợp hoặc đọc nó và giết tiến trình.

Một tập tin khóa rất có thể là ứng dụng cụ thể. Các tệp khóa được sử dụng để chỉ ra rằng một số tài nguyên đang được sử dụng và quá trình muốn truy cập phải đợi cho đến khi tài nguyên được giải phóng trước khi tiếp tục.

8
user591