/bin/sh/jobs.h

https://bitbucket.org/freebsd/freebsd-head/ · C Header · 102 lines · 48 code · 12 blank · 42 comment · 0 complexity · 77853c35d41536d79d67924616d464cd MD5 · raw file

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