Może to być trudne, ponieważ możesz mieć osobne instancje tego samego procesu, które działają niezależnie. Na przykład serwery nasłuchujące na różnych portach lub usługi działające jako różni użytkownicy. Aby rozróżnić te instancje, musisz przypisać każdemu z nich unikalny tag. Znacznik jest często plikiem, ale może być lokalnym gniazdem w abstrakcyjnej przestrzeni nazw, portem TCP itp. - wystarczy dowolny unikalny identyfikator. Gdy znacznik jest plikiem, może to być zwykły plik zawierający identyfikator procesu (plik pid) lub nazwaną potok lub gniazdo, na którym nasłuchuje plik itp. Idealnie, znacznik jest punktem końcowym komunikacji, który umożliwia klientom połączenie do tego procesu.
Każdy z tych rodzajów tagów powoduje inny sposób sprawdzenia, czy szukana instancja jest uruchomiona. Na przykład, z lokalnym gniazdem plików, spróbuj się z nim połączyć i rozpocznij proces, jeśli proces nie nasłuchuje na tym gnieździe. Jeśli znacznik jest plikiem pid, sprawdź, czy istnieje proces o tym identyfikatorze procesu, ale uważaj, aby był on delikatny, ponieważ jeśli proces umarł, może istnieć niepowiązany proces, który ponownie użył swojego identyfikatora. Uważaj, że jeśli dwóch klientów spróbuje dotrzeć do procesu w krótkim czasie, obaj mogą stwierdzić, że proces nie istnieje i obaj próbują go uruchomić; odpowiednia ochrona przed takimi warunkami wyścigowymi może być trudna.
Łatwiej jest zarządzać instancjami, gdy wszystkie są uruchamiane przez ten sam proces superwizora, a ten proces superwizora wykrywa moment śmierci instancji i odpowiednio reaguje. Wiele programów monitorujących usługi, które mogą to zrobić.
Jeśli program nie reaguje na znany punkt końcowy komunikacji i nie jest zarządzany przez program nadzorujący, znacznikiem biednego człowieka jest plik pid: plik zawierający identyfikator procesu. Po uruchomieniu procesu zapisz pid do pliku o wcześniej ustalonej nazwie. Gdy potrzebujesz, aby proces istniał, przeczytaj plik pid i sprawdź, czy istnieje proces z tym pid. Po zabiciu procesu usuń plik pid. Najistotniejszym problemem związanym z nienadzorowanym plikiem pid jest to, że jeśli proces umrze, jego pid może zostać ponownie wykorzystany przez jakiś niezwiązany proces. Powinieneś przynajmniej sprawdzić nazwę procesu lub plik wykonywalny procesu, aby upewnić się, że rozmawiasz z właściwym procesem. Wiele wariantów Uniksa ma polecenie pgrep :pgrep SOMENAME
zawiera listę procesów, których nazwa zawiera SOMENAME jako podciąg, z dodatkowymi opcjami ograniczającymi do konkretnego użytkownika, wymagającymi dokładnego dopasowania, zmieniającymi, które z kilku możliwych pojęć „nazwa procesu” jest używana itp.
ps -ef | grep -v grep | grep "process_name" || run_command_here