Kann die Interaktivität eines Prozesses programmgesteuert bestimmt werden?

408
warren

Ist es möglich, tail -fmithilfe von Skripts oder einer anderen Sprache zu bestimmen, ob ein bestimmter ausgeführter Prozess interaktiv oder lediglich einem Dämon ähnlich ist (dh ein tatsächlicher Dämon oder ein ähnlicher Prozess )?

Wenn das so ist, wie?

Ist es auf mehreren Plattformen möglich (ich verwende meistens bash, aber Lösungen in anderen Shells - sogar PowerShell - wären ebenfalls willkommen)?

1
Zu welchen Zwecken? grawity vor 12 Jahren 0
@gawity - speziell im Anschluss an meine vorherige [Frage] (http://superuser.com/q/324123/978), aber auch für Berichte / Überwachungszwecke warren vor 12 Jahren 0

2 Antworten auf die Frage

2
Rich Homolka

Aufgrund Ihres Kommentars zu der anderen Antwort ist das, worum Sie bitten, sehr schwer.

Sie können die Bibliotheken überprüfen, mit denen sich die App verbindet, und wenn es sich um eine Bildschirmsteuerung (z. B. ncurses) handelt, ist dies wahrscheinlich interaktiv. Diese könnten jedoch in bestimmten Laufsituationen "nicht interaktiv (nach Ihrer Definition)" ausgeführt werden.

Ich denke, das Beste, was Sie tun können, ist strace, das würde Ihnen zeigen, welche Syscalls die App verwendet. Wenn es von einem FD liest, das mit einem TTY verbunden ist, ist es interaktiv.

+1. Die Frage des OP klingt nach dem Problem des reisenden Verkäufers. . . surfasb vor 12 Jahren 0
@surfasb - es kann sein, dass das, wonach ich suche, extrem schwierig / im Wesentlichen unmöglich ist, aber es ist immer einen Versuch wert zu fragen :) warren vor 12 Jahren 0
@warren: Niemand klopft an die Frage. Wir sind nur pessimistisch, dass es eine praktikable Lösung gibt. surfasb vor 12 Jahren 1
@surfasb - vollständig verstanden ... ich hoffe nur, dass es eine * andere * Antwortform gibt als "Sie können nicht" oder "Sie können nicht effektiv". warren vor 12 Jahren 0
0
OldWolf

Wenn ich Ihre Frage richtig verstanden habe, sollte ein interaktiver Prozess mit einem tty verbunden sein.

Das Folgende auf einem Linux-System sollte Ihnen alle interaktiven Prozesse bieten:

ps -e | grep pts 
läuft 'tail -f / var / log //stderr.log & `wird ebenfalls ein tty zugeordnet, ist jedoch nicht interaktiv: - | warren vor 12 Jahren 0
@warren Dieser Job ist technisch immer noch interaktiv, es sei denn, Sie müssen nichts dagegen tun und das steuernde Terminal trennen. Eine schlampige Analogie wäre, zwei Terminalsitzungen offen zu haben und den laufenden Prozess in einem der Terminals zu ignorieren. Der Prozess ist immer noch interaktiv, Sie achten einfach nicht darauf. Was ist das allgemeine Problem, das Sie lösen möchten? OldWolf vor 12 Jahren 0
"tail" ist ein nicht interaktives Programm: Es zeigt lediglich den Inhalt einer Datei (oder ähnliches) an. Ich versuche mithilfe eines Skripts oder eines anderen Tools zu ermitteln, ob ein Benutzer etwas wie Emacs, vi, less usw. ausführt - und nicht etwa etwas wie Katze, Schwanz oder Kopf warren vor 12 Jahren 0