popen() doesn't return NULL if the program it runs produces no output. You'll still get a valid pipe, it's just that reading from it will give you EOF (or possibly something else; I imagine POSIX defines this behavior but caveat emptor).
Also,
Code:
fpup = popen("cat /proc/loadavg", "r");
seems like a rather bizarre way of writing
Code:
fpup = fopen("/proc/loadavg", "r");
but perhaps you have a reason for it.
In addition, I imagine that your
Code:
while(fscanf(fp, "%d ", &load) != EOF)
loop will, quite possibly, never terminate. If fscanf() can't convert anything, it'll return 0, and leave the non-readable data in the stream, meaning the next time around, the same thing will happen. If you do use fscanf(), it's generally a good idea to check the return value against the number of conversions you expect.
It's non-standard, but since it looks like you're on a Linux system and doing non-standard stuff anyway, I'd recommend getloadavg() if you want to peek at system load. It's a bit nicer than poking around in /proc yourself.
As for a general response to your question, your HTTP server likely creates a pidfile that you can check; to see if the process is alive, you can use kill().
However, if you're using Apache, it comes with an apachectl script that does the dirty work. If you run "apachectl start" and Apache's already running, it gracefully exits; otherwise Apache starts. Your distribution's init scripts quite possibly mimic this behavior, but you'd have to check that yourself.
For the case of potential runaway processes, you really can't do much more than go through all of /proc and see if anything there is interesting.