Is a Running Application Frozen?

To get information on the process state you could use the ps tool. From the man page:

 state     The state is given by a sequence of characters, for example,
           ``RWNA''.  The first character indicates the run state of the
           process:

           I       Marks a process that is idle (sleeping for longer than
                   about 20 seconds).
           R       Marks a runnable process.
           S       Marks a process that is sleeping for less than about 20
                   seconds.
           T       Marks a stopped process.
           U       Marks a process in uninterruptible wait.
           Z       Marks a dead process (a ``zombie'').

And further:

           Additional characters after these, if any, indicate additional
           state information:

           +       The process is in the foreground process group of its
                   control terminal.
           <       The process has raised CPU scheduling priority.
           >       The process has specified a soft limit on memory
                   requirements and is currently exceeding that limit;
                   such a process is (necessarily) not swapped.
           A       the process has asked for random page replacement
                   (VA_ANOM, from vadvise(2), for example, lisp(1) in a
                   garbage collect).
           E       The process is trying to exit.
           L       The process has pages locked in core (for example, for
                   raw I/O).
           N       The process has reduced CPU scheduling priority (see
                   setpriority(2)).
           S       The process has asked for FIFO page replacement
                   (VA_SEQL, from vadvise(2), for example, a large image
                   processing program using virtual memory to sequentially
                   address voluminous data).
           s       The process is a session leader.
           V       The process is suspended during a vfork(2).
           W       The process is swapped out.
           X       The process is being traced or debugged.

Example (ps <pid>):

“S” seems to be the most “normal” state (very likely not frozen). When you get any of the other letters, it’s up to you to decide if the process is “frozen”.

In a short test I get “R” for example when the process is busy doing something (beachball, for example BBEdit opening a huge file).