Chcę mieć taki skrypt powłoki:
my-app &
echo $my-app-pid
Ale nie wiem, jak uzyskać pid właśnie wykonanego polecenia.
Wiem, że mogę po prostu użyć jobs -p my-app
polecenia, aby grep pid. Ale jeśli chcę uruchomić powłokę wiele razy, ta metoda nie będzie działać. Ponieważ rodzaj zadania jest niejednoznaczny.
bash
shell
process
background-process
David S.
źródło
źródło
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &
- dysfunkcja 24 listopada 10 o 14:28echo $!
my-app & myVar=$! ; fg
.fg
ponownie przenosi proces na pierwszy plan. Następnie mogę wydrukowaćecho $myVar
później i jestem prawie pewien, że moja aplikacja już się zakończyła.Uzyskaj
PID
:Zapisz
PID
w zmiennej:Zapisz wszystkie wystąpienia
PID
w pliku tekstowym:Zapisz dane wyjściowe, błędy i
PID
oddzielne pliki:źródło
my-app
zakończy się, a może nawet gorzej, PID zostanie ponownie wykorzystany później, będziesz mieć złe informacje w pliku. Nie sądzę, aby ta odpowiedź naprawdęsleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?
`main &
sposób na złapanie PID?Spróbuj czegoś takiego
źródło
Wypróbuj coś takiego:
Umieszczając pierwszą literę procesu między,
[
]
upewnia się, żegrep
proces nie pojawi się na liście. W razie potrzeby możesz również dodać grep do swojej nazwy użytkownika.źródło
my-app
jest to bardzo delikatne i nie działa, jeśli jest wykonywane więcej niż jeden raz - davidshen84 szczególnie martwi się tym cas.pgrep
zamiast tego.