Każdy proces będzie wymieniony w wynikach ps aux
; czy bieganie, spanie, zombie lub zatrzymany.
Jednak w twoim przypadku, ponieważ proces został uruchomiony przy użyciu sh abc.sh
, sh
aplikacja (powłoka) jest uruchomiona i nie abc.sh
. Dlatego ps aux
nie będzie zawierać procesu, z abc.sh
powodu którego grep
nie może przynieść żadnego wyniku.
Prawidłowy sposób, w jaki powinieneś był go użyć, to:
ps aux | grep sh
Może to również zwrócić ci inny proces, który ma łańcuch w sh
dowolnym miejscu na wyjściu ps aux
.
Należy zauważyć, że proces będzie „działał”, gdy wynik ps aux
ma wartość STAT
as R
. Jeśli jest to coś innego, to nie działa w instancji, w której uruchomiłeś polecenie, aby sprawdzić uruchomione procesy. Różne stany procesu można znaleźć na stronie podręcznika dla ps:
D uninterruptible sleep (usually IO)
R running or runnable (on run queue)
S interruptible sleep (waiting for an event to complete)
T stopped, either by a job control signal or because it is being traced
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
Równie dobrze możesz uruchomić top
polecenie, aby sprawdzić, czy proces działa, czy śpi i ile procesora i pamięci RAM zużywa. (To ponownie wyświetli listę Twojego procesu jako sh
).
Jeśli jednak chcesz, aby proces był wymieniony jako abc.sh
, to powinieneś mieć pierwszą linię skryptu, który uruchamiasz jako:
#!/bin/sh
aby powłoka wiedziała, jakiej aplikacji użyć do uruchomienia skryptu (w tym przypadku sh, zmień ją #!/bin/bash
na bash), a następnie zapewnij uprawnienia do wykonywania procesu, używając:
chmod +x /path/to/abc.sh
zamieniając /path/to/
na lokalizację abc.sh
pliku, a następnie uruchom abc.sh
za pomocą
/path/to/abc.sh
ponownie zastępując /path/to/
lokalizację abc.sh
pliku.
S+
środkips aux | grep filename
polecenia.Mój problem
grep
polega na tym, że jest to parser całej linii. W twoim przykładzie szukasz „abc”, ale odsuwa ono instancjęgrep
(która szuka „abc”). Trochę okrągły. Możesz to odfiltrować, ale uważam, że to wszystko jest trochę przewrotne.Chciałbym zwrócić się
awk
do trochę polotu.awk
dzieli linie na pola na podstawie białych znaków (domyślnie). Pola 11 $ + są kolumnami poleceń, więc jeśli polecenie brzmi „sh abc.sh ...”,$11
będziesh
i$12
będzieabc.sh
.Jeśli chcesz kontrolować wyjście lub łańcuch za pomocą Basha
&&
i||
operatorów, możesz, ale musisz być trochę bardziej sprytny.grep
wyjdzie z kodem stanu 1 (błąd techniczny, wyzwala||
), jeśli nic nie zostanie znalezione, aleawk
zawsze wyjdzie z kodu 0. Możemy to zmienić, każąc mu wyjść, jeśli coś znajdzie, i rzucić 1, jeśli nie:Oczywiście, jeśli zależy ci tylko na zapisie wyników na ekranie, możesz to wszystko zrobić w
awk
:źródło
Właściwym sposobem sprawdzenia w bieżącej sesji bash, czy proces rozpoczęty w tle, na przykład
sh abc.sh &
, jest już uruchomiony, czy nie, to użyciejobs
wbudowanej komendy.Przykład:
Oznacza to, że
sh abc.sh
proces rozpoczęty w tle jest uruchomiony. Po zakończeniu procesu zobaczysz coś takiego:Jeśli w tle działa więcej procesów, możesz ograniczyć dane wyjściowe tylko do
sh abc.sh
procesu, używając:Zobacz
help jobs
więcej informacji.Powyższa metoda będzie działać tylko w bieżącej sesji bash. Ale jeśli uczestniczysz w innej sesji bash (np. W innym oknie lub karcie terminala lub w skrypcie), oprócz:
możesz użyć również:
co wydaje mi się prostsze. Jeśli zobaczysz wpisane polecenie w danych wyjściowych (
sh abc.sh
w tym przypadku), oznacza to, że proces jest nadal uruchomiony. Jeśli nie, proces się zakończył.źródło
Jeśli skrypt jest obecnie uruchomiony, musi zostać wyświetlony za pomocą
ps aux
polecenia. Jeśli nie zostanie to pokazane przezps
, oznacza to, że wykonanie skryptu jest obecnie zakończone.Wynik
ps
tego typu oznacza, że skrypt nie jest aktualnie uruchomiony,Jeśli pokazuje się tak, oznacza to, że skrypt jest obecnie uruchomiony.
Wszystko opiera się na treści skryptu.
Na przykład, jeśli utworzysz taki skrypt. Wyświetla komunikat HI podczas wykonywania. Wyświetlenie danych wyjściowych zajmuje kilka sekund i zostało zakończone po uzyskaniu ostatecznego wyniku.
Ale jeśli taki skrypt jest taki,
Zakończenie procesu zajmuje kilka minut. Tymczasem jeśli uruchomisz
ps aux | grep filename
polecenie, zostanie wyświetlone na wyjściu. Ponieważ skrypt jest obecnie uruchomiony.źródło
jeśli chcesz sprawdzić wszystkie procesy, użyj „góra”
jeśli chcesz poznać procesy uruchamiane przez java, użyj
ps -ef | grep java
jeśli inny proces, po prostu użyj
ps -ef | grep xyz
lub po prostu/etc/init.d xyz status
jeśli przez jakikolwiek kod jak
.sh
wtedy./xyz.sh status
źródło
jeśli chcesz po prostu sprawdzić, czy proces nie jest przetwarzany, przejdź do tego katalogu i wpisz
ll -tr
,.csv
czy.work
na końcu pliku widzisz itd.źródło
.csv
dotyczy plików rozdzielanych przecinkami, które nie są związane z uruchomionym procesem.