Here are answers for one cron daemon, dillon's cron (dcron) which I'm the current developer of. There are a variety of cron daemons in distribution, and the answers are going to be different. Vixie cron is probably the most widespread; I don't know the answers for that.
Anyway, for dillon's cron, a user can have 256 significant lines in their crontab (this is configurable at compile time). Root can have many more than that (I think 65535). Plus root can have multiple crontabs (the one at /var/spool/cron/crontabs/root, plus as many additional ones as you want in /etc/cron.d/).
Cron commands are only run one once a minute, at the top of the minute. You could have 60 different commands run every minute, and just prefix them with sleep 1
, sleep 2
, and so on. But I doubt this is the best solution for what you have in mind.
Yes, in our implementation each cronjob forks into a separate process. If there's any output to stdout or stderr, yet another process is forked to mail it.