Szukam pojedynczej linii, która zwraca pid uruchomionego procesu.
Obecnie mam:
ps -A -o pid,cmd|grep xxx|head -n 1
A to zwraca pięść pid, command
. Potrzebuję tylko pierwszej liczby z wyjścia i zignoruj resztę. Przypuszczam, że sed
lub awk
pomógłbym tutaj, ale moje doświadczenie z nimi jest ograniczone.
Ma to również inny problem, zwróci pid grep, jeśli xxx nie jest uruchomiony.
Naprawdę ważne jest, aby mieć jedną linię, ponieważ chcę ponownie wykorzystać dane wyjściowe do zrobienia czegoś innego, na przykład zabicia tego procesu.
Odpowiedzi:
Jeśli chcesz tylko pid procesu, możesz skorzystać,
pgrep
jeśli jest dostępny.pgrep <command>
zwróci pid polecenia (lub listę pid w przypadku, gdy uruchomiona jest więcej niż jedna instancja polecenia, w którym to przypadku możesz skorzystać zhead
innych odpowiednich poleceń).Mam nadzieję, że to pomaga!
źródło
kill `pgrep xxx`
pkill
.Potrzebne jest jeszcze jedno polecenie; chcesz tylko pierwsze pole z wiersza wartości oddzielonych spacjami:
Cóż, dwa. Dodałem kolejny grep, aby usunąć sam grep z wyjścia.
źródło
Wystarczy użyć pgrep, jest to o wiele prostsze
Powyższe wybiera najstarszy proces o dokładnej nazwie
źródło
pkill
(z tymi samymi argumentami) byłby najbardziej bezpośrednim wyborem.pidof xxx
wystarczy na Linuksieźródło
Działa na Cygwin, więc nie mogę używać -A i -o, ale coś takiego:
źródło
możesz zrobić coś takiego
wtedy xxx musi być nazwą procesu i nie odbierze grep z powodu kotwicy ^
źródło