Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kontrola procesów UNIX
Forum PHP.pl > Forum > PHP
misiek08
Witam!
Udostępniałem serwery gry na serwerze dedykowanym z systemem Windows i wykorzystywałem tam polecenia takie jak:
  1. <?php
  2. exec("xxx.exe /cfg=xxx.cfg");
  3. ?>

i po prostu:
  1. <?php
  2. `xxx.exe /cfg=xxx.cfg`
  3. ?>

To wszystko działało i serwery też śmigały. Natomiast teraz muszę przerzucić się na Debian 5. I mam pytanie z działu PHP/Debian:
Jakich poleceń mam używać do uruchamiania procesów w tle(podejrzewam że trzeba tutaj użyć screen'a), a także do ich wyłącznia.
Najważniejsze jest to że mam ok. 10-15 folderów i w każdym uruchamia się to samo polecenie i teraz jak dokonać identyfikacji procesów żeby 1 klient nie wyłączał wszystkich serwerów na maszynie.
Jak do PHP przyjąć ID procesu po włączeniu go w screenie i jak potem tak proces zabić.
okitoki
faktycznie tematyka PHP smile.gif. serwer jest na windows a ty chcesz przejść na linux, to nie będzie takie proste wiesz w windzie mogłeś robić co ci się jawnie podobało, a na linuxie niestety, waładzę ma admin i nie wszystkie programy tu ci pójdą a jeżeli chodzi o procesy w linuxie to jest polecenie "ps -aux" do zabijania jest kill i tak dalej,
Zyx
okitoki -> ja wiem, że polska język trudna, ale od czego jest choćby głupi Word?

misiek08 -> w systemach uniksowych exec() itd. korzystają z powłoki sh (konkretniej jakiegoś jej klonu smile.gif) do odpalania innych programów. Po prostu musisz wykorzystać składnię tej powłoki do osiągnięcia żądanego efektu. Nie wiem, jak stoisz z wiedzą nt systemów uniksowych, więc ciężko coś więcej konkretnie doradzić. Na pewno możesz mieć problemy z uprawnieniami, gdyż tutaj bezpieczeństwo ma znacznie wyższy priorytet niż w Windowsie.

Uruchamiając program w tle, musisz zakończyć wywołanie znakiem & - ponadto sam PHP nakłada Ci ograniczenie, że musisz przekierować wyjście procesu do pliku, /dev/null albo co tam chcesz, inaczej się on zwiesi i będzie oczekiwać na zakończenie działania. Przykład:

Kod
exec('./program > /dev/null 2>&1 &');


Do przeglądania listy procesów możesz użyć polecenia ps, ale nie w takiej formie, jak podał ją okitoki. Raz, że jeśli już aux, to bez pauzy, a dwa, że te opcje wyplują Ci o wiele za dużo niepotrzebnych danych. Poczytaj sobie manual i dobierz to, czego potrzebujesz. Kontrolę przebiegiem wykonywania procesów realizujesz poleceniem kill, które służy (wbrew temu, co sugeruje nazwa) do wysyłania sygnałów.
misiek08
Tzn moja wiedza nie jest zbyt duża, i jak pisałem jestem zmuszony kupić serwer dedykowany z linux'em.
Myślę że dobre będzie polecenie:
Kod
exec('screen wine ./xxx.exe /cfg=xx.cfg');

Tylko teraz jak z tego wyciągnąć z tego ID procesu żeby wykorzystać potem przy kill?

Może zrobić tak że każdy ten exe ma nazwę wg wzoru:
xx1.exe
xx2.exe ?
okitoki
no nic, zostaje ci przetestować to na żywym organizmie, tzn na debianie. jak to będzie twój serwer to lepiej to uruchom w wierszu shell-u, będzie większe prawdopodobieństwo że Ci to pudzie.
osl
wyciąganie ID procesu - jedyne co mi do głowy przychodzi na szybko to kombinacja ps+grep+cut - słowem, coś w guście skryptów shellowych winksmiley.jpg
misiek08
A może PHP niech wywołuje skrypty basha. Jak to jest z przechwytywaniem w PHP tego co bash chce powiedzieć światu?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.