You're missing a begin..end when starting your processes. Your fork
should look like this:
fork
automatic int j = i;
begin // treat everything from here as an own process
job[j] = process::self();
$display("process %d starting...",j);
if(j==2) begin
#100 $display("delay 2ns");
end
end
join_none
By putting that begin..end, you treat all statements as belonging to one process. What your code was doing is spawning a separate process for each statement, i.e. one for the $display(...), one for the if(...) and one for assigning the job.
Here's a working example on EDA Playground: http://www.edaplayground.com/x/2f8 I changed program to module to work on that ModelSim version.