2017-10-23 2 views
-1

Wenn wir den Befehl "top" über die Befehlszeile ausführen, können wir die Prozesse sehen und in der Spalte COMMAND sehen wir einen generischen Namen. Für e, g, wenn ich einen PHP-Prozess im Hintergrund läuft, wieUbuntu (Linux im Allgemeinen) Wie ändert man den Namen des Hintergrundprozesses?

/usr/bin/php /path/to/myscript.php & 

Ich sehe nur php unter dem Kommando Spalt aufgeführt, wenn ich top laufen.

Gibt es eine Möglichkeit, den Namen des Hintergrundprozesses zu ändern, wenn ich es ausführe?

* Diese Frage ist PHP-spezifisch.

+1

Mögliches Duplikat von [Mit Prctl PR \ _SET \ _NAME den Namen für Prozess oder Thread festlegen?] (Https://stackoverflow.com/questions/30453048/using-prctl-pr-set-name-to-set- name-for-process-or-thread) – melpomene

+0

Sieht stark wie ein [XY Problem] (http://xyproblem.info) aus. ** Warum ** müssen Sie den Namen des Hintergrundprozesses ändern? Es gibt sehr wenige Gründe, dies zu tun. Die meisten PHP (oder andere) Programme müssen das nicht tun. Wenn Sie Probleme mit dem Systemadministrator haben, teilen Sie dies bitte mit. –

+0

@BasileStarynkevitch nur für die Lesbarkeit. Wenn Sie 25 Hintergrundprozesse starten und eine Top- oder PS-Uax ausführen, anstatt dass alle als PHP angezeigt werden. Wenn sie als php1, php2, php3 angezeigt werden, verleiht sie ihr eine gute Lesbarkeit. – Shanthi

Antwort

-2

Ein Prozess hat nicht wirklich einen Namen, es hat eine PID (vom Typ pid_t, die eine ganze Zahl ist, das Ergebnis fork(2) oder verwandten Systemaufruf). Lesen Sie credentials(7).

Und der angezeigte php Name ist der richtige, es ist der, der execve(2) als das erste Argument von Index 0 gegeben wird, und es ist der Programmname. Der Kernel führt nicht direkt Ihr PHP-Skript aus, es läuft der php Interpreter, der als Eingabe Ihr Skript (also das eigentliche Programm, das ausgeführt wird, ist php). Und Ihr Shell-Befehl ist explizit geben /usr/bin/php als den Programmnamen. Sie könnten strace(1) verwenden, um das zu überprüfen.

Ihre Shell zeigt (über jobs -l) die background processes an. Sie könnten also Ihre eigene Shell schreiben, um sie anders darzustellen.

Vielleicht könnten Sie in C einige Wrapper ELF ausführbare schreiben, die die entsprechenden execve(2) tut.

Ich bin mir nicht sicher, dass es das Problem wert ist. Siehe auch proc(5), um zu verstehen, wie Anwendungen (wie Ihre Shell oder ps oder) den Kernel über Prozesse abfragen (unter Verwendung des Dateisystems /proc/).

Wie melopmane kommentiert, auch einen Blick in prctl(2) und PR_SET_NAME (Ich habe nie). Ich habe jedoch pthread_setname_np(3) verwendet, was einen Thread betrifft.

(noch, ich glaube nicht, es ist die Mühe in Ihrem Fall wert, was man falsch ist es, einen PHP-Prozess php mit mit?)

Siehe auch setproctitle oder einige PHP extension in C schreiben das zu tun ...

Aber Sie sollten nicht kümmern! und ich denke sogar, dass die Änderung des Namens Ihres Prozesses ist verwirrend an den Systemadministrator. Er möchte wissen, dass es eine PHP-Sache ist. Selbst wenn Sie Ihren Systemadministrator missbrauchen könnten, sollten Sie nicht wollen.

BTW, könnten Sie überprüfen (mit proc(5) ...) mit einem Befehl wie cat /proc/1234/maps (ersetzen 1234 mit der tatsächlichen PID Ihres Prozesses), dass der PHP-Interpreter ein wichtiger Teil Ihrer virtual address space ist (also gibt es keinen Grund, "php zu verbergen", wie Sie wollen), und Sie könnten Ihre finden spezifische php Prozess (wenn Sie viele von ihnen haben) mit auch pgrep(1).

+1

Was ist mit' prctl' mit 'PR_SET_NAME'? – melpomene

+2

Für PHP speziell: http://php.net/setproctitle – melpomene

+0

http://php.net/setproctitle löste es. Danke @melpomene – Shanthi

Verwandte Themen