How to identify not responding process programmatically How to identify not responding process programmatically unix unix

How to identify not responding process programmatically


I'm assuming you mean a spinning wheel application hang? There are many ways to freeze. The particular cause is important. If it's a Cocoa app, you could try sending your main thread / Window an event... or scripting up Spin Control.


A random answer … I'm not a programmer but I stumbled across something of possible interest whilst working through stuff in Ask Different …

sched_prim.c (Scheduling primitives) in relatively old xnu-124.7 includes:

#define MAX_STUCK_THREADS   128/* *  do_thread_scan: scan for stuck threads.  A thread is stuck if *  it is runnable but its priority is so low that it has not *  run for several seconds.  Its priority should be higher, but *  won't be until it runs and calls update_priority.  The scanner *  finds these threads and does the updates. * *  Scanner runs in two passes.  Pass one squirrels likely *  thread ids away in an array  (takes out references for them). *  Pass two does the priority updates.  This is necessary because *  the run queue lock is required for the candidate scan, but *  cannot be held during updates [set_pri will deadlock]. * *  Array length should be enough so that restart isn't necessary, *  but restart logic is included.  Does not scan processor runqs. * */thread_t        stuck_threads[MAX_STUCK_THREADS];int             stuck_count = 0;/* *  do_runq_scan is the guts of pass 1.  It scans a runq for *  stuck threads.  A boolean is returned indicating whether *  a retry is needed. */

– is that, about stuck threads, food for thought?

Or too way off from the question about processes?


At a glance, no comparable block of code in sched_prim.c in xnu-1699.26.8 source for Mac OS X 10.7.4.