For me it seems that cgminer hangs on occuring difficulty changes of the pool like this (It just happened when I was checking the PC):
[2013-09-30 00:30:49] Accepted 845b027c Diff 205/64 GPU 0 pool 0
[2013-09-30 00:30:56] Stratum from pool 0 detected new block
[2013-09-30 00:30:57] Accepted 2b1cb18f Diff 194/64 GPU 0 pool 0
[2013-09-30 00:31:00] Accepted b0b966b5 Diff 171/64 GPU 1 pool 0
[2013-09-30 00:31:02] Accepted a1d27d5a Diff 8.59K/64 GPU 0 pool 0
[2013-09-30 00:31:03] Stratum from pool 0 detected new block
[2013-09-30 00:31:04] Stratum connection to pool 0 interrupted
[2013-09-30 00:31:04] Pool 0 stratum share submission failure
[2013-09-30 00:31:05] Pool 0 difficulty changed to 512.000000
[2013-09-30 00:31:05] Pool 0 difficulty changed to 64.000000
I use CGWatcher but it seems that most times CGWatcher is not able to restart cgminer in these special cases.
Which monitoring options are you using? If a condition is met that requires a miner restart, CGWatcher should kill the process if the miner is unresponsive or ignoring the quit command. Regardless of monitoring options, it will also restart (or kill & start if necessary) the process if Windows reports that it is not responding. There are special circumstances where CGWatcher is unable to kill the process, but Task Manager is also unable to kill it. This is rare and caused by driver or hardware problems.
I'm just curious if this is something I can fix. If you're able to kill it in Task Manager, CGWatcher should be able to kill it. So it's a matter of figuring out if an existing monitoring option will trigger the restart in this scenario or if a new option needs to be created. And if the restart is being triggered, why it isn't working properly. I'd appreciate any more info you can give me on what happens when it fails to restart (i.e. debug log entries).