Subversion Repositories HelenOS

Rev

Rev 2714 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. /*  $NetBSD: jobs.h,v 1.12 2000/05/22 10:18:47 elric Exp $  */
  2.  
  3. /*-
  4.  * Copyright (c) 1991, 1993
  5.  *  The Regents of the University of California.  All rights reserved.
  6.  *
  7.  * This code is derived from software contributed to Berkeley by
  8.  * Kenneth Almquist.
  9.  *
  10.  * Redistribution and use in source and binary forms, with or without
  11.  * modification, are permitted provided that the following conditions
  12.  * are met:
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer.
  15.  * 2. Redistributions in binary form must reproduce the above copyright
  16.  *    notice, this list of conditions and the following disclaimer in the
  17.  *    documentation and/or other materials provided with the distribution.
  18.  * 3. All advertising materials mentioning features or use of this software
  19.  *    must display the following acknowledgement:
  20.  *  This product includes software developed by the University of
  21.  *  California, Berkeley and its contributors.
  22.  * 4. Neither the name of the University nor the names of its contributors
  23.  *    may be used to endorse or promote products derived from this software
  24.  *    without specific prior written permission.
  25.  *
  26.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  27.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  28.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  29.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  30.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  31.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  32.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  33.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  34.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  35.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  36.  * SUCH DAMAGE.
  37.  *
  38.  *  @(#)jobs.h  8.2 (Berkeley) 5/4/95
  39.  */
  40.  
  41. /* Mode argument to forkshell.  Don't change FORK_FG or FORK_BG. */
  42. #define FORK_FG 0
  43. #define FORK_BG 1
  44. #define FORK_NOJOB 2
  45.  
  46.  
  47. /*
  48.  * A job structure contains information about a job.  A job is either a
  49.  * single process or a set of processes contained in a pipeline.  In the
  50.  * latter case, pidlist will be non-NULL, and will point to a -1 terminated
  51.  * array of pids.
  52.  */
  53.  
  54. struct procstat {
  55.     pid_t pid;      /* process id */
  56.     int status;     /* status flags (defined above) */
  57.     char *cmd;      /* text of command being run */
  58. };
  59.  
  60.  
  61. /* states */
  62. #define JOBSTOPPED 1        /* all procs are stopped */
  63. #define JOBDONE 2       /* all procs are completed */
  64.  
  65.  
  66. struct job {
  67.     struct procstat ps0;    /* status of process */
  68.     struct procstat *ps;    /* status or processes when more than one */
  69.     short nprocs;       /* number of processes */
  70.     short pgrp;     /* process group of this job */
  71.     char state;     /* true if job is finished */
  72.     char used;      /* true if this entry is in used */
  73.     char changed;       /* true if status has changed */
  74. #if JOBS
  75.     char jobctl;        /* job running under job control */
  76. #endif
  77. };
  78.  
  79. extern short backgndpid;    /* pid of last background process */
  80. extern int job_warning;     /* user was warned about stopped jobs */
  81.  
  82. void setjobctl (int);
  83. int killcmd (int, char **);
  84. int fgcmd (int, char **);
  85. int bgcmd (int, char **);
  86. int jobscmd (int, char **);
  87. void showjobs (int);
  88. int waitcmd (int, char **);
  89. int jobidcmd (int, char **);
  90. struct job *makejob (union node *, int);
  91. int forkshell (struct job *, union node *, int);
  92. int waitforjob (struct job *);
  93. int stoppedjobs (void);
  94. char *commandtext (union node *);
  95.  
  96. #if ! JOBS
  97. #define setjobctl(on)   /* do nothing */
  98. #endif
  99.