Chcę mieć taki skrypt powłoki:
my-app & echo $my-app-pid Ale tak nie wiem, jak uzyskać pid właśnie wykonanego polecenia.
 Wiem, że mogę po prostu użyć polecenia jobs -p my-app, aby grepować pid. Ale jeśli chcę wykonać powłokę wiele razy, ta metoda nie zadziała. Ponieważ  specyfikacja zadania  jest niejednoznaczna. 
Odpowiedź
Odpowiedź
 Uzyskaj PID: 
#!/bin/bash my-app & echo $!  Zapisz PID w zmiennej: 
#!/bin/bash my-app & export APP_PID=$!  Zapisz wszystkie wystąpienia PID w pliku tekstowym: 
#!/bin/bash my-app & echo $! >>/tmp/my-app.pid  Zapisz dane wyjściowe, błędy i PID w oddzielnych plikach : 
#!/bin/bash my-app >/tmp/my-app.log 2>/tmp/my-app.error.log & echo $! >>/tmp/my-app.pid echo "my-app PID"s: $(cat /tmp/my-app.pid)" Komentarze
-  Pytanie nie ' nie pytaj o przekierowanie, wtedy twoja odpowiedź jest w większości taka sama jak zaakceptowana, z wyjątkiem tego, że jeśli instancja my-appzakończy się, a być może nawet gorzej, jego PID zostanie później ponownie użyty, ' Będziesz zawierał złe informacje w twoim pliku. Nie ' nie sądzę, aby ta odpowiedź dodała wiele wartości do istniejącej zaakceptowanej odpowiedzi naprawdę
- @EricRenouf post został zaktualizowany!
-  kolejna pochodna, która może się przydać. Pobiera PID i jednocześnie traktuje go jako (głównie) proces pierwszoplanowy: sleep 4 | grep INVALID & export MY_PID=$!; fg; echo $MY_PID returned with $?`
-  isnt APP = main &sposób na pobranie PID?
Odpowiedź
Spróbuj czegoś takiego jak
pidof my_app >> /tmp/my_app.pid Komentarze
- zewnętrzne polecenie i wolno, jeśli system może bezpośrednio podać PID, dlaczego przeszukuje wszystkie procesy w celu znalezienia właśnie tego ? a także, czy ' t mieć pewność, że ' uzyskasz prawidłową wartość
Odpowiedz
Spróbuj czegoś takiego:
 ps ef | grep "[m]y-app" | awk "{print $2}"  Umieść pierwszą literę swojego procesu między [ ] zapewnia, że na liście nie ma procesu grep. W razie potrzeby możesz również dodać grep do swojej nazwy użytkownika. 
Komentarze
-  To ' s bardzo w najlepszym razie kruchy i nie ' nie działa, jeśli my-appjest wykonywany więcej niż raz – davidshen84 szczególnie się tym martwi cas.
-  Jeśli nawet wybierzesz tę trasę, powinieneś zamiast tego użyć pgrep.
/bin/sh -c 'echo $$>/tmp/my.pid && exec program args' &– sysfault 24 listopada ' 10 o 14:28echo $!my-app & myVar=$! ; fg.fgprzenosi proces ponownie na pierwszy plan. Mogę wtedy wydrukowaćecho $myVarpóźniej i ' jestem prawie pewien, że moja aplikacja już się zakończyła.