The newest stable branch of CUPS, 1.4, has a different job cancellation behaviour (hey, two words in a row spelt differently in American English!) than 1.3 did. If you have cancelled a job but it still appears in the job queue, this might explain why.
The lpstat -o command shows jobs that are in the CUPS scheduler’s ‘active jobs
list’. The CUPS web interface also uses this list when displaying the job queue; so does the system-config-printer job viewer.
In CUPS 1.3 and earlier you should never see cancelled jobs in queue.
In CUPS 1.4 the only time you should see cancelled jobs in the queue is when those jobs have been cancelled but one or more filters or backends have not yet finished.
When a job is cancelled, each process in the job pipeline is sent a SIGTERM signal. If there is no signal handler, this kills the process there and then.
However, the CUPS backends ignore that signal and just wait for the filters to finish sending data. The reason for this is that some devices may require sort of reset code to be sent in order to be back in their ‘normal’ state.
In contrast to CUPS 1.3, in 1.4 a job is not immediately removed from the active jobs list at the time it is cancelled. This is in order to implement a job kill delay: after the configurable ‘JobKillDelay’ (default is 300 seconds), any remaining filters or backends associated with cancelled jobs on the active jobs list are sent SIGKILL, and the job is removed from the active jobs list.
CUPS 1.4 is available in Fedora 11.