Mam xmms2d
uruchomiony proces, ale dwa możliwe pliki wykonywalne (w różnych katalogach, oba na ścieżce wykonywalnej), które mogły go odrodzić. Podejrzewam, że jeden z nich jest uszkodzony, ponieważ czasami ten program działa, a czasem nie. Proces działa teraz, więc chcę usunąć (lub zmienić nazwę) drugiego.
ps ax|grep "xmms"
zwraca 8505 ? SLl 2:38 xmms2d -v
bez informacji o ścieżce. Biorąc pod uwagę PID, czy mogę sprawdzić, czy został uruchomiony z /usr/bin/xmms2d
czy /usr/local/bin/xmms2d
?
Dzięki!
ps -C xmms
powinien sprawić, że twój grep stanie się przestarzały.Odpowiedzi:
Spróbuj tego:
Lub jeśli nie chcesz analizować danych wyjściowych
ls
, po prostu wykonaj:lub
źródło
Jeśli korzystasz z systemu Solaris, sposób działania różni się nieco od sugerowanego dla systemu Linux:
Jeśli chcesz poznać bieżący katalog roboczy uruchomionych procesów, możesz użyć:
na przykład:
źródło
Uruchamiam podkładkę pod mysz z powłoki:
sprawdź, skąd pochodzi:
zacznij od ścieżki:
spójrz przez ps:
Jak widzimy, ten wywołany bez ścieżki jest wyświetlany bez ścieżki i zaczyna się od ŚCIEŻKI, a zatem można go znaleźć
To takie proste, prawda? Czekać! Co się stanie, jeśli uruchomię podkładkę pod mysz z menu? Cóż, można to określić przy użyciu ustawień PATH lub bez nich. Próbowałem. Normalny start prowadzi do prostej „podkładki pod mysz”
ps v -C
. Ponieważ ~ / bin jest pierwszą częścią mojej ŚCIEŻKI, tworzę tam manekina, i voila, manekin jest uruchamiany z menu.Ale co jeśli uruchomisz program, który sam się usuwa? Który nie znajdzie usuniętego programu i zgłosi niewłaściwy, jeśli na ścieżce jest drugi.
To warunek wyścigu. Jeśli wiesz, że twoje programy nie usuwają się same lub nie są przenoszone podczas sprawdzania ich lokalizacji
ps v -C NAME
iwhich NAME
powinny działać całkiem dobrze.źródło
./someexecutable
w obu?Śmiało i usuń oba pliki (bez opcji force -f). Plik, który zostanie usunięty, to ten, który nie był uruchomiony !!
Systemowe blokowanie plików wykonywalnych nie pozwoli na usunięcie żadnego pliku, który jest aktualnie wykonywany.
źródło
init
, które zawsze działają, są aktualizowane? Nie można modyfikować działającego pliku wykonywalnego.