2017-09-07 2 views
0

Ich muss PID Prozess von seinem Namen bekommen. Ich schaute auf docs, aber es scheint, dass ich PID nur bekommen kann, wenn ich manuell mit spawn()Wie bekommt man die PID des Prozesses nach Namen?

aufrufen Zum Beispiel muss ich PID von bereits funktionierenden FireFox bekommen.

Ich schreibe kleine App für die Überwachung von Micro-Services. Nur ein Dienst kann gleichzeitig funktionieren.

+0

Sie tun es auf die gleiche Weise wie in C. Und es gibt möglicherweise viele PIDs mit dem gleichen Namen (sogar was der Benutzer als ein einzelnes Programm sieht, kann mehrere PIDs haben). Was hast du vor damit zu tun? –

Antwort

2

Prozess hat keinen Namen, daher ist es nicht möglich, PID zu finden, indem nach einer Zeichenfolge gesucht wird, die einen Namen darstellen kann oder nicht. Was der Prozess hat, ist der Befehl, der verwendet wurde, wenn fork() ed war. So ist der „Name“ Sie sehen, wenn Sie ps verwenden ist eigentlich argv [0] und als Adam wies darauf hin, Sie Hunderte von Prozessen mit dem gleichen Befehl kann ...

Es ist möglich, einen Namen zu geben zum Thread mit pthread_setname(). In D set/get wird der Thread-Name mit der Thread.name property erledigt. Problem ist, dass Entwickler in den meisten Fällen nicht den Namen des Threads festlegen ...

Sie können eine Liste der laufenden Prozesse greifen, indem Sie etwas wie readproc (http://procps.cvs.sourceforge.net/viewvc/procps/procps/proc/readproc.c?view=markup) implementieren und dann für den Prozess, den Sie benötigen PID von, aber das ist funktioniert nicht garantiert.

+0

Was Sie sagen, ist nicht ganz richtig, zumindest für Windows. Siehe das folgende: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682623(v=vs.85).aspx Das zu D zu portieren sollte ziemlich einfach sein. - Für Linux usw. idk, wenn es etwas Gleichwertiges gibt. – Bauss

Verwandte Themen