/ / Bash Daemon Nazwany "sh" lub "sleep", a nie nazwą pliku - bash, process

Bash Daemon Nazwany "sh" lub "sleep", a nie nazwą pliku - bash, process

Stworzyłem prosty skrypt bash, chmod + x, i pomyślnie uruchamiam go jako usługę w tle.

Ale skrypt jest nazywany "sh" lub "sleep" lub jakakolwiek komenda wydaje się działać w tym czasie, a nie moja nazwa skryptu, kiedy przeglądam listę procesów.

Jak mogę nazwać proces mojego skryptu bash, aby go odróżnić? Chcę mieć pewność, że nie uruchomię skryptu więcej niż jeden raz.

Jestem bardzo nowy w bashowaniu skryptów ... przepraszam, jeśli to głupie pytanie.

Używam #! / Bin / bash

Odpowiedzi:

1 dla odpowiedzi № 1

Twoja powłoka rodzicielska będzie działać przez cały czas. To będzie sh. Zostaną uruchomione wszystkie inne procesy uruchomione przez tę powłokę. Spróbuj pstree, aby pokazać relacje rodzic-dziecko.

BTW, jeśli używasz funkcji specyficznych dla basha, które nie są w powłoce Bourne POSIX, powinieneś użyć #! / Bin / bash, nie #! / Bin / sh. Niektóre systemy mają bash, ale mają lżejsze / bin / sh.

Jestem bardzo nowy w bashowaniu skryptów ... przepraszam, jeśli to głupie pytanie.

Nie tępy. Podstawowy, ale tylko wtedy, gdy zrozumiesz, jak działają procesy uniksowe (i jak cokolwiek używasz w OS X, które pokazuje nazwy "usług", ponieważ nie jest to słowo, które miałoby sens w dowolnym kontekście Uniksa w tej sytuacji. ) Więc masz do czynienia z dużą ilością złożoności i nie winię cię za to, że pytasz.

Może OS X spogląda na liderów grupy procesów lub coś, co wymyśli "nazwę usługi", jeśli tak naprawdę to nazywa. myśleć to byłby proces nazwy czegokolwiekproces jest uruchomiony na pierwszym planie (tzn. że nie nastąpiło rozwidlenie na końcu, więc powłoka czeka na niego przed wykonaniem następnego polecenia).


2 dla odpowiedzi nr 2

Czy w swoim scenariuszu masz "shebang"?

Właśnie zrobiłem mały test. Zauważyłem, że bez shebanga, skrypt testowy pokazał się w ps tak jak jakakolwiek komenda była wykonywana w tym czasie. Jednak jeśli ja, jak zwykle, umieszczam:

#!/bin/bash

lub

#!/bin/sh

(który w moim systemie jest dowiązany symbolicznie /bin/dash) jako pierwsza linia w skrypcie pojawił się skrypt pod własnym nazwiskiem w wyjściu ps.


1 dla odpowiedzi nr 3

Ponieważ to, co ps pokazuje również, że mam przeczucie, nie masz szczęścia. Przepraszam, ale skrypty powłoki nie mogą zmienić swojej widocznej nazwy procesu.

Jednak w przypadkach, które pokazują bash, możesz utworzyć dowiązanie symboliczne do basha pod nazwą opisową do swojego skryptu i wywołać skrypt za pośrednictwem tego dowiązania symbolicznego.


0 dla odpowiedzi nr 4

Nie wiem, jak przenośne będzie moje rozwiązanie, ale działa na Linuksie.

Jeśli naprawdę chcesz to zrobić (może chceszbyć w stanie zabić twój proces, przeglądając go po nazwie), możesz napisać mały program C, aby wywołać powłokę z inną nazwą procesu. Na przykład ...

#include <unistd.h>
#include <stdio.h>

int main(int argc, char **argv)
{
if (argv[1])
{
argv[0] = argv[1];
return execvp("sh", argv);
}
else
{
fprintf(stderr, "usage: %s <script> [args]n", argv[0]);
return 1;
}
}

Powiedzmy, że nazywa się wrapper.c. Możesz skompilować z:

gcc -o wrapper wrapper.c

Następnie możesz uruchomić:

./wrapper ./my-script

I zaznacz top lub ps. Powinien mieć nazwę "podrobioną".

Teraz ... Czy rzeczywiście chcesz to zrobić? Nie wiem, to chyba nie jest tego warte. Większość ludzi nie przejmuje się takimi rzeczami.