Changeset 1199 for trunk/src/kash/jobs.c
- Timestamp:
- Oct 7, 2007, 12:04:05 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kash/jobs.c
r1198 r1199 186 186 } 187 187 #else 188 out2str( "sh: Need FIOCLEX or FD_CLOEXEC to support job control");188 out2str(psh, "sh: Need FIOCLEX or FD_CLOEXEC to support job control"); 189 189 goto out; 190 190 #endif … … 192 192 if ((initialpgrp = tcgetpgrp(ttyfd)) < 0) { 193 193 out: 194 out2str( "sh: can't access tty; job control turned off\n");194 out2str(psh, "sh: can't access tty; job control turned off\n"); 195 195 mflag(psh) = 0; 196 196 return; … … 207 207 if (ioctl(ttyfd, TIOCGETD, (char *)&ldisc) < 0 208 208 || ldisc != NTTYDISC) { 209 out2str( "sh: need new tty driver to run job control; job control turned off\n");209 out2str(psh, "sh: need new tty driver to run job control; job control turned off\n"); 210 210 mflag(psh) = 0; 211 211 return; … … 216 216 setsignal(SIGTTIN, 0); 217 217 if (getpgid(0) != rootpid && setpgid(0, rootpid) == -1) 218 error( "Cannot set process group (%s) at %d",218 error(psh, "Cannot set process group (%s) at %d", 219 219 strerror(errno), __LINE__); 220 220 if (tcsetpgrp(ttyfd, rootpid) == -1) 221 error( "Cannot set tty process group (%s) at %d",221 error(psh, "Cannot set tty process group (%s) at %d", 222 222 strerror(errno), __LINE__); 223 223 } else { /* turning job control off */ 224 224 if (getpgid(0) != initialpgrp && setpgid(0, initialpgrp) == -1) 225 error( "Cannot set process group (%s) at %d",225 error(psh, "Cannot set process group (%s) at %d", 226 226 strerror(errno), __LINE__); 227 227 if (tcsetpgrp(ttyfd, initialpgrp) == -1) 228 error( "Cannot set tty process group (%s) at %d",228 error(psh, "Cannot set tty process group (%s) at %d", 229 229 strerror(errno), __LINE__); 230 230 close(ttyfd); … … 263 263 jp = getjob(*argptr, 0); 264 264 if (jp->jobctl == 0) 265 error( "job not created under job control");266 out1fmt( "%s", jp->ps[0].cmd);265 error(psh, "job not created under job control"); 266 out1fmt(psh, "%s", jp->ps[0].cmd); 267 267 for (i = 1; i < jp->nprocs; i++) 268 out1fmt( " | %s", jp->ps[i].cmd );269 out1c( '\n');270 output_flushall( );268 out1fmt(psh, " | %s", jp->ps[i].cmd ); 269 out1c(psh, '\n'); 270 output_flushall(psh); 271 271 272 272 for (i = 0; i < jp->nprocs; i++) … … 275 275 276 276 if (i >= jp->nprocs) { 277 error( "Cannot set tty process group (%s) at %d",277 error(psh, "Cannot set tty process group (%s) at %d", 278 278 strerror(errno), __LINE__); 279 279 } … … 340 340 nextopt(""); 341 341 do { 342 jp = getjob( *argptr, 0);342 jp = getjob(psh, *psh->argptr, 0); 343 343 if (jp->jobctl == 0) 344 error( "job not created under job control");344 error(psh, "job not created under job control"); 345 345 set_curjob(jp, 1); 346 out1fmt( "[%ld] %s", (long)(jp - jobtab + 1), jp->ps[0].cmd);346 out1fmt(psh, "[%ld] %s", (long)(jp - jobtab + 1), jp->ps[0].cmd); 347 347 for (i = 1; i < jp->nprocs; i++) 348 out1fmt( " | %s", jp->ps[i].cmd );349 out1c( '\n');350 output_flushall( );348 out1fmt(psh, " | %s", jp->ps[i].cmd ); 349 out1c(psh, '\n'); 350 output_flushall(psh); 351 351 restartjob(jp); 352 } while (* argptr && *++argptr);352 } while (*psh->argptr && *++psh->argptr); 353 353 return 0; 354 354 } … … 368 368 break; 369 369 if (i >= jp->nprocs) 370 error( "Cannot continue job (%s)", strerror(errno));370 error(psh, "Cannot continue job (%s)", strerror(errno)); 371 371 for (ps = jp->ps, i = jp->nprocs ; --i >= 0 ; ps++) { 372 372 if (WIFSTOPPED(ps->status)) { … … 425 425 if (mode & SHOW_SIGNALLED && !(mode & SHOW_ISSIG)) { 426 426 if (jp->state == JOBDONE && !(mode & SHOW_NO_FREE)) { 427 TRACE(( "showjob: freeing job %d\n", jp - jobtab + 1));427 TRACE((psh, "showjob: freeing job %d\n", jp - jobtab + 1)); 428 428 freejob(jp); 429 429 } … … 538 538 int silent = 0, gotpid; 539 539 540 TRACE(( "showjobs(%x) called\n", mode));540 TRACE((psh, "showjobs(%x) called\n", mode)); 541 541 542 542 /* If not even one one job changed, there is nothing to do */ … … 551 551 if (mflag(psh) && gotpid != -1 && tcgetpgrp(ttyfd) != getpid()) { 552 552 if (tcsetpgrp(ttyfd, getpid()) == -1) 553 error( "Cannot set tty process group (%s) at %d",553 error(psh, "Cannot set tty process group (%s) at %d", 554 554 strerror(errno), __LINE__); 555 TRACE(( "repaired tty process group\n"));555 TRACE((psh, "repaired tty process group\n")); 556 556 silent = 1; 557 557 } … … 668 668 jp = getjob(*argptr, 0); 669 669 for (i = 0 ; i < jp->nprocs ; ) { 670 out1fmt( "%ld", (long)jp->ps[i].pid);671 out1c( ++i < jp->nprocs ? ' ' : '\n');670 out1fmt(psh, "%ld", (long)jp->ps[i].pid); 671 out1c(psh, ++i < jp->nprocs ? ' ' : '\n'); 672 672 } 673 673 return 0; … … 762 762 } 763 763 if (!noerror) 764 error( err_msg, name);764 error(psh, err_msg, name); 765 765 return 0; 766 766 } … … 824 824 } 825 825 INTON; 826 TRACE(( "makejob(0x%lx, %d) returns %%%d\n", (long)node, nprocs,827 jp - jobtab + 1));826 TRACE((psh, "makejob(0x%lx, %d) returns %%%d\n", (long)node, nprocs, 827 jp - jobtab + 1)); 828 828 return jp; 829 829 } … … 850 850 int pid; 851 851 852 TRACE(( "forkshell(%%%d, %p, %d) called\n", jp - jobtab, n, mode));852 TRACE((psh, "forkshell(%%%d, %p, %d) called\n", jp - jobtab, n, mode)); 853 853 switch ((pid = fork())) { 854 854 case -1: 855 TRACE(( "Fork failed, errno=%d\n", errno));855 TRACE((psh, "Fork failed, errno=%d\n", errno)); 856 856 INTON; 857 error( "Cannot fork");857 error(psh, "Cannot fork"); 858 858 break; 859 859 case 0: … … 888 888 commandtext(ps, n); 889 889 } 890 TRACE(( "In parent shell: child = %d\n", pid));890 TRACE((psh, "In parent shell: child = %d\n", pid)); 891 891 return pid; 892 892 } … … 901 901 902 902 wasroot = rootshell; 903 TRACE(( "Child shell %d\n", getpid()));903 TRACE((psh, "Child shell %d\n", getpid())); 904 904 if (!vforked) 905 905 rootshell = 0; … … 919 919 if (mode == FORK_FG) { 920 920 if (tcsetpgrp(ttyfd, pgrp) == -1) 921 error( "Cannot set tty process group (%s) at %d",921 error(psh, "Cannot set tty process group (%s) at %d", 922 922 strerror(errno), __LINE__); 923 923 } … … 931 931 close(0); 932 932 if (open(devnull, O_RDONLY) != 0) 933 error( nullerr, devnull);933 error(psh, nullerr, devnull); 934 934 } 935 935 } … … 942 942 close(0); 943 943 if (open(devnull, O_RDONLY) != 0) 944 error( nullerr, devnull);944 error(psh, nullerr, devnull); 945 945 } 946 946 } … … 985 985 986 986 INTOFF; 987 TRACE(( "waitforjob(%%%d) called\n", jp - jobtab + 1));987 TRACE((psh, "waitforjob(%%%d) called\n", jp - jobtab + 1)); 988 988 while (jp->state == JOBRUNNING) { 989 989 dowait(1, jp); … … 992 992 if (jp->jobctl) { 993 993 if (tcsetpgrp(ttyfd, mypgrp) == -1) 994 error( "Cannot set tty process group (%s) at %d",994 error(psh, "Cannot set tty process group (%s) at %d", 995 995 strerror(errno), __LINE__); 996 996 } … … 1008 1008 else 1009 1009 st = WTERMSIG(status) + 128; 1010 TRACE(( "waitforjob: job %d, nproc %d, status %x, st %x\n",1010 TRACE((psh, "waitforjob: job %d, nproc %d, status %x, st %x\n", 1011 1011 jp - jobtab + 1, jp->nprocs, status, st )); 1012 1012 #if JOBS … … 1048 1048 extern volatile char gotsig[]; 1049 1049 1050 TRACE(( "dowait(%d) called\n", block));1050 TRACE((psh, "dowait(%d) called\n", block)); 1051 1051 do { 1052 1052 pid = waitproc(block, job, &status); 1053 TRACE(( "wait returns pid %d, status %d\n", pid, status));1053 TRACE((psh, "wait returns pid %d, status %d\n", pid, status)); 1054 1054 } while (pid == -1 && errno == EINTR && gotsig[SIGINT - 1] == 0); 1055 1055 if (pid <= 0) … … 1065 1065 continue; 1066 1066 if (sp->pid == pid) { 1067 TRACE(( "Job %d: changing status of proc %d from 0x%x to 0x%x\n", jp - jobtab + 1, pid, sp->status, status));1067 TRACE((psh, "Job %d: changing status of proc %d from 0x%x to 0x%x\n", jp - jobtab + 1, pid, sp->status, status)); 1068 1068 sp->status = status; 1069 1069 thisjob = jp; … … 1077 1077 int state = done ? JOBDONE : JOBSTOPPED; 1078 1078 if (jp->state != state) { 1079 TRACE(( "Job %d: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state));1079 TRACE((psh, "Job %d: changing state from %d to %d\n", jp - jobtab + 1, jp->state, state)); 1080 1080 jp->state = state; 1081 1081 #if JOBS … … 1097 1097 showjob(out2, thisjob, mode); 1098 1098 else { 1099 TRACE(( "Not printing status, rootshell=%d, job=%p\n",1099 TRACE((psh, "Not printing status, rootshell=%d, job=%p\n", 1100 1100 rootshell, job)); 1101 1101 thisjob->changed = 1; … … 1196 1196 continue; 1197 1197 if (jp->state == JOBSTOPPED) { 1198 out2str( "You have stopped jobs.\n");1198 out2str(psh, "You have stopped jobs.\n"); 1199 1199 job_warning = 2; 1200 1200 return (1); … … 1233 1233 } else 1234 1234 *cmdnextc = '\0'; 1235 TRACE(( "commandtext: ps->cmd %x, end %x, left %d\n\t\"%s\"\n",1235 TRACE((psh, "commandtext: ps->cmd %x, end %x, left %d\n\t\"%s\"\n", 1236 1236 ps->cmd, cmdnextc, cmdnleft, ps->cmd)); 1237 1237 }
Note:
See TracChangeset
for help on using the changeset viewer.