1 |
< |
/* $OpenBSD: jobs.c,v 1.35 2006/02/06 16:47:07 jmc Exp $ */ |
1 |
> |
/* $OpenBSD: jobs.c,v 1.36 2007/09/06 19:57:47 otto Exp $ */ |
2 |
|
|
3 |
|
#include "sh.h" |
4 |
|
|
5 |
< |
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.25 2007/07/22 13:34:50 tg Exp $"); |
5 |
> |
__RCSID("$MirOS: src/bin/mksh/jobs.c,v 1.28 2007/09/09 19:12:10 tg Exp $"); |
6 |
|
|
7 |
|
/* Order important! */ |
8 |
|
#define PRUNNING 0 |
214 |
|
int i; |
215 |
|
|
216 |
|
if (Flag(FMONITOR)) { |
217 |
+ |
bool use_tty = Flag(FTALKING); |
218 |
+ |
|
219 |
|
/* Don't call tcgetattr() 'til we own the tty process group */ |
220 |
< |
tty_init(false); |
220 |
> |
if (use_tty) |
221 |
> |
tty_init(false); |
222 |
|
|
223 |
|
/* no controlling tty, no SIGT* */ |
224 |
< |
ttypgrp_ok = tty_fd >= 0 && tty_devtty; |
224 |
> |
ttypgrp_ok = use_tty && tty_fd >= 0 && tty_devtty; |
225 |
|
|
226 |
|
if (ttypgrp_ok && (our_pgrp = getpgrp()) < 0) { |
227 |
|
warningf(false, "j_init: getpgrp() failed: %s", |
267 |
|
our_pgrp = kshpid; |
268 |
|
} |
269 |
|
} |
270 |
< |
if (!ttypgrp_ok) |
270 |
> |
if (use_tty && !ttypgrp_ok) |
271 |
|
warningf(false, "warning: won't have full job control"); |
272 |
|
if (tty_fd >= 0) |
273 |
|
tcgetattr(tty_fd, &tty_state); |
372 |
|
else |
373 |
|
p->pid = i; |
374 |
|
|
375 |
+ |
/* Ensure next child gets a (slightly) different $RANDOM sequence */ |
376 |
+ |
change_random((p->pid << 1) | (ischild ? 1 : 0)); |
377 |
+ |
|
378 |
|
/* job control set up */ |
379 |
|
if (Flag(FMONITOR) && !(flags&XXCOM)) { |
380 |
|
int dotty = 0; |
411 |
|
SS_RESTORE_DFL|SS_FORCE); |
412 |
|
} |
413 |
|
if (Flag(FBGNICE) && (flags & XBGND)) |
414 |
< |
nice(4); |
414 |
> |
i = nice(4); |
415 |
|
if ((flags & XBGND) && !Flag(FMONITOR)) { |
416 |
|
setsig(&sigtraps[SIGINT], SIG_IGN, |
417 |
|
SS_RESTORE_IGN|SS_FORCE); |
443 |
|
} |
444 |
|
|
445 |
|
/* shell (parent) stuff */ |
440 |
– |
/* Ensure next child gets a (slightly) different $RANDOM sequence */ |
441 |
– |
change_random(); |
446 |
|
if (!(flags & XPIPEO)) { /* last process in a job */ |
447 |
|
j_startjob(j); |
448 |
|
if (flags & XCOPROC) { |