Also zuerst wäre es natürlich interessant zu wissen, auf welchem System das passieren soll.
Unabhängig davon könnte das ziemlich problematisch sein. Wenn ein Programm 'hängenbleibt', dann heißt das ja meistens, daß es in irgendeier Endlosschleife festhängt. Im Programm tut sich aber etwas, nämlich die Schleife. Woher soll nun ein anderes Programm wissen, ob das, was im überwachten Programm passiert, das richtige ist.
Bei Windows-Fensteranwendungen läuft das Programm z.B. die ganze Laufzeit über in der Nachrichtenverarbeitungsschleife. Das könnte von außen aussehen, wie ein festhängen in einer Endlosschleife, ist aber so gewollt
Eigentlich kann eine solche Überwachung m.E. nur auf 2 Arten stattfinden:
1. Anhand der Produkte eines Programms. Wenn das Programm z.B. eine Logdatei erzeugt, dann kann man überprüfen, wie lange sich die Logdatei nicht mehr geändert hat.
2. Anhand einer Art 'Watchdog'. Der muß aber im Programm implementiert sein. Entweder mit einem internen Zähler, der von außen zugreifbar ist oder indem das Programm zyklisch eine Nachricht nach außen sendet (z.B. unter Windows per SendMessage an HWND_BROADCAST oder systemunabhängig eine Netzwerknachricht an 255.255.255.255). Bleibt die Nachricht für eine gewisse Zeit aus (oder der Inhalt verändert sich nicht), hängt das Programm.
Das Alles erhebt natürlich keinen Anspruch auf Vollständigkeit. Wenn jemand noch einen anderen Weg kennt, lasse ich mich auch gerne belehren.
P.S.: Eine philosophische Frage: Was machst Du, wenn das Überwachungsprogramm hängt oder "Wer überwacht die Überwacher?" ;-)