main.c
author viric <viriketo@gmail.com>
Wed, 19 Oct 2016 22:09:02 +0200
changeset 351 69b9bbe171c6
parent 349 3916245a60b5
child 354 d8042e4ba43d
permissions -rw-r--r--
Removed tag list
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 48
diff changeset
     1
/*
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 48
diff changeset
     2
    Task Spooler - a task queue system for the unix user
267
11631dd11ff8 Updating copyright years in the source.
viric@mandarina
parents: 266
diff changeset
     3
    Copyright (C) 2007-2009  Lluís Batlle i Rossell
49
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 48
diff changeset
     4
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 48
diff changeset
     5
    Please find the license in the provided COPYING file.
09bb8a5583e9 Added the license.
lbatlle@npdl268.bpo.hp.com
parents: 48
diff changeset
     6
*/
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
     7
#include <unistd.h>
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
     8
#include <stdlib.h>
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
     9
#include <string.h>
95
d31aaee661d1 Protection against SIGPIPE. Block it.
viric@llimona
parents: 92
diff changeset
    10
#include <signal.h>
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    11
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    12
#include <stdio.h>
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
    13
#include <sys/time.h>
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    14
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    15
#include "main.h"
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    16
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    17
extern char *optarg;
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    18
extern int optind, opterr, optopt;
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    19
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    20
/* Globals */
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    21
struct Command_line command_line;
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    22
int server_socket;
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    23
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
    24
/* Globals for the environment of getopt */
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
    25
static char getopt_env[] = "POSIXLY_CORRECT=YES";
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
    26
static char *old_getopt_env;
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
    27
349
3916245a60b5 Setting version to 1.0.0
viric <viriketo@gmail.com>
parents: 341
diff changeset
    28
static char version[] = "Task Spooler v1.0.0 - a task queue system for the unix user.\n"
341
1169cb2d5557 Increasing version to 0.7.6, and update manuals.
viric <viriketo@gmail.com>
parents: 340
diff changeset
    29
"Copyright (C) 2007-2016  Lluis Batlle i Rossell";
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    30
95
d31aaee661d1 Protection against SIGPIPE. Block it.
viric@llimona
parents: 92
diff changeset
    31
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    32
static void default_command_line()
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    33
{
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
    34
    command_line.request = c_LIST;
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    35
    command_line.need_server = 0;
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    36
    command_line.store_output = 1;
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    37
    command_line.should_go_background = 1;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 53
diff changeset
    38
    command_line.should_keep_finished = 1;
65
dced0efccc19 Added gzip output.
viric@llimona
parents: 63
diff changeset
    39
    command_line.gzip = 0;
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
    40
    command_line.send_output_by_mail = 0;
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 149
diff changeset
    41
    command_line.label = 0;
259
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
    42
    command_line.do_depend = 0;
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
    43
    command_line.depend_on = -1; /* -1 means depend on previous */
219
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
    44
    command_line.max_slots = 1;
295
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 283
diff changeset
    45
    command_line.wait_enqueuing = 1;
305
365f3598d010 Adding the functionality of keeping stderr apart. For Jan Šmydke.
viric <viriketo@gmail.com>
parents: 303
diff changeset
    46
    command_line.stderr_apart = 0;
315
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 308
diff changeset
    47
    command_line.num_slots = 1;
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    48
}
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    49
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 16
diff changeset
    50
void get_command(int index, int argc, char **argv)
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 16
diff changeset
    51
{
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 65
diff changeset
    52
    command_line.command.array = &(argv[index]);
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 65
diff changeset
    53
    command_line.command.num = argc - index;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 16
diff changeset
    54
}
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
    55
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    56
static int get_two_jobs(const char *str, int *j1, int *j2)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    57
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    58
    char tmp[50];
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    59
    char *tmp2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    60
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    61
    if(strlen(str) >= 50)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    62
        return 0;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    63
    strcpy(tmp, str);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    64
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    65
    tmp2 = strchr(tmp , '-');
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    66
    if (tmp2 == NULL)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    67
        return 0;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    68
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    69
    /* We change the '-' to '\0', so we have a delimiter,
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    70
     * and we can access the two strings for the ids */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    71
    *tmp2 = '\0';
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    72
    /* Skip the '\0', and point tmp2 to the second id */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    73
    ++tmp2;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    74
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    75
    *j1 = atoi(tmp);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    76
    *j2 = atoi(tmp2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    77
    return 1;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    78
}
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    79
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    80
void parse_opts(int argc, char **argv)
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    81
{
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    82
    int c;
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
    83
    int res;
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    84
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    85
    /* Parse options */
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    86
    while(1) {
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
    87
        c = getopt(argc, argv, ":VhKgClnfmBEr:t:c:o:p:w:k:u:s:U:i:N:L:dS:D:");
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    88
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    89
        if (c == -1)
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    90
            break;
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
    91
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    92
        switch(c)
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    93
        {
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
    94
            case 'K':
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
    95
                command_line.request = c_KILL_SERVER;
95
d31aaee661d1 Protection against SIGPIPE. Block it.
viric@llimona
parents: 92
diff changeset
    96
                command_line.should_go_background = 0;
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
    97
                break;
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
    98
            case 'k':
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
    99
                command_line.request = c_KILL_JOB;
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   100
                command_line.jobid = atoi(optarg);
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   101
                break;
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   102
            case 'l':
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   103
                command_line.request = c_LIST;
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   104
                break;
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   105
            case 'h':
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   106
                command_line.request = c_SHOW_HELP;
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   107
                break;
155
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 152
diff changeset
   108
            case 'd':
259
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   109
                command_line.do_depend = 1;
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   110
                command_line.depend_on = -1;
155
55515f9eac77 Added 'depend' -d
viric@vicerveza
parents: 152
diff changeset
   111
                break;
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   112
            case 'V':
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   113
                command_line.request = c_SHOW_VERSION;
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   114
                break;
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   115
            case 'C':
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   116
                command_line.request = c_CLEAR_FINISHED;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   117
                break;
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 18
diff changeset
   118
            case 'c':
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   119
                command_line.request = c_CAT;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   120
                command_line.jobid = atoi(optarg);
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   121
                break;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   122
            case 'o':
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   123
                command_line.request = c_SHOW_OUTPUT_FILE;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   124
                command_line.jobid = atoi(optarg);
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 18
diff changeset
   125
                break;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 20
diff changeset
   126
            case 'n':
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   127
                command_line.store_output = 0;
22
afdc8410633f Now output can go to filenames.
viric@llimona
parents: 20
diff changeset
   128
                break;
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 149
diff changeset
   129
            case 'L':
a615d7971bf6 Added -L (label)
viric@llimona
parents: 149
diff changeset
   130
                command_line.label = optarg;
a615d7971bf6 Added -L (label)
viric@llimona
parents: 149
diff changeset
   131
                break;
65
dced0efccc19 Added gzip output.
viric@llimona
parents: 63
diff changeset
   132
            case 'g':
dced0efccc19 Added gzip output.
viric@llimona
parents: 63
diff changeset
   133
                command_line.gzip = 1;
dced0efccc19 Added gzip output.
viric@llimona
parents: 63
diff changeset
   134
                break;
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   135
            case 'f':
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   136
                command_line.should_go_background = 0;
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   137
                break;
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   138
            case 'm':
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   139
                command_line.send_output_by_mail = 1;
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   140
                break;
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   141
            case 't':
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   142
                command_line.request = c_TAIL;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   143
                command_line.jobid = atoi(optarg);
29
ca47653a4cbc Add an option for electing not to go into background.
viric@llimona
parents: 27
diff changeset
   144
                break;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   145
            case 'p':
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   146
                command_line.request = c_SHOW_PID;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   147
                command_line.jobid = atoi(optarg);
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   148
                break;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   149
            case 'i':
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   150
                command_line.request = c_INFO;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   151
                command_line.jobid = atoi(optarg);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   152
                break;
315
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 308
diff changeset
   153
            case 'N':
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 308
diff changeset
   154
                command_line.num_slots = atoi(optarg);
331
7e3b3663bb34 Fixing the minimum of num_slots per job to zero.
viric <viriketo@gmail.com>
parents: 319
diff changeset
   155
                if (command_line.num_slots < 0)
7e3b3663bb34 Fixing the minimum of num_slots per job to zero.
viric <viriketo@gmail.com>
parents: 319
diff changeset
   156
                    command_line.num_slots = 0;
315
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 308
diff changeset
   157
                break;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   158
            case 'r':
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   159
                command_line.request = c_REMOVEJOB;
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   160
                command_line.jobid = atoi(optarg);
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   161
                break;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   162
            case 'w':
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   163
                command_line.request = c_WAITJOB;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   164
                command_line.jobid = atoi(optarg);
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   165
                break;
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   166
            case 'u':
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   167
                command_line.request = c_URGENT;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   168
                command_line.jobid = atoi(optarg);
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   169
                break;
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   170
            case 's':
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   171
                command_line.request = c_GET_STATE;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   172
                command_line.jobid = atoi(optarg);
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   173
                break;
218
f084c8de313f First attempt at multiple slot running.
viric@mandarina
parents: 216
diff changeset
   174
            case 'S':
219
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   175
                command_line.request = c_SET_MAX_SLOTS;
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   176
                command_line.max_slots = atoi(optarg);
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   177
                if (command_line.max_slots < 1)
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   178
                {
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   179
                    fprintf(stderr, "You should set at minimum 1 slot.\n");
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   180
                    exit(-1);
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   181
                }
218
f084c8de313f First attempt at multiple slot running.
viric@mandarina
parents: 216
diff changeset
   182
                break;
259
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   183
            case 'D':
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   184
                command_line.do_depend = 1;
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   185
                command_line.depend_on = atoi(optarg);
ba3827aa8f25 Adding -D. Forward to 0.6.3.
viric@mandarina
parents: 253
diff changeset
   186
                break;
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   187
            case 'U':
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   188
                command_line.request = c_SWAP_JOBS;
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   189
                res = get_two_jobs(optarg, &command_line.jobid,
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   190
                        &command_line.jobid2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   191
                if (!res)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   192
                {
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   193
                    fprintf(stderr, "Wrong <id-id> for -U.\n");
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   194
                    exit(-1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   195
                }
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   196
                if (command_line.jobid == command_line.jobid2)
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   197
                {
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   198
                    fprintf(stderr, "Wrong <id-id> for -U. "
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   199
                            "Use different ids.\n");
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   200
                    exit(-1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   201
                }
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   202
                break;
295
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 283
diff changeset
   203
            case 'B':
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 283
diff changeset
   204
                /* I picked 'B' quite at random among the letters left */
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 283
diff changeset
   205
                command_line.wait_enqueuing = 0;
a63f43a17fd7 Adding the option '-B' for Mark, that will make ts quit if it cannot enqueue a
viric <viriketo@gmail.com>
parents: 283
diff changeset
   206
                break;
305
365f3598d010 Adding the functionality of keeping stderr apart. For Jan Šmydke.
viric <viriketo@gmail.com>
parents: 303
diff changeset
   207
            case 'E':
365f3598d010 Adding the functionality of keeping stderr apart. For Jan Šmydke.
viric <viriketo@gmail.com>
parents: 303
diff changeset
   208
                command_line.stderr_apart = 1;
365f3598d010 Adding the functionality of keeping stderr apart. For Jan Šmydke.
viric <viriketo@gmail.com>
parents: 303
diff changeset
   209
                break;
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   210
            case ':':
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   211
                switch(optopt)
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   212
                {
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   213
                    case 't':
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   214
                        command_line.request = c_TAIL;
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   215
                        command_line.jobid = -1; /* This means the 'last' job */
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   216
                        break;
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   217
                    case 'c':
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   218
                        command_line.request = c_CAT;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   219
                        command_line.jobid = -1; /* This means the 'last' job */
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   220
                        break;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   221
                    case 'o':
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   222
                        command_line.request = c_SHOW_OUTPUT_FILE;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   223
                        command_line.jobid = -1; /* This means the 'last' job */
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   224
                        break;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   225
                    case 'p':
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   226
                        command_line.request = c_SHOW_PID;
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   227
                        command_line.jobid = -1; /* This means the 'last' job */
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   228
                        break;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   229
                    case 'i':
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   230
                        command_line.request = c_INFO;
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   231
                        command_line.jobid = -1; /* This means the 'last' job */
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   232
                        break;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   233
                    case 'r':
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   234
                        command_line.request = c_REMOVEJOB;
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   235
                        command_line.jobid = -1; /* This means the 'last'
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   236
                                                    added job */
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   237
                        break;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   238
                    case 'w':
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   239
                        command_line.request = c_WAITJOB;
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   240
                        command_line.jobid = -1; /* This means the 'last'
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   241
                                                    added job */
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   242
                        break;
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   243
                    case 'u':
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   244
                        command_line.request = c_URGENT;
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   245
                        command_line.jobid = -1; /* This means the 'last'
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   246
                                                    added job */
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   247
                        break;
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   248
                    case 's':
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   249
                        command_line.request = c_GET_STATE;
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   250
                        command_line.jobid = -1; /* This means the 'last'
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   251
                                                    added job */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   252
                        break;
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   253
                    case 'k':
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   254
                        command_line.request = c_KILL_JOB;
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   255
                        command_line.jobid = -1; /* This means the 'last' job */
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   256
                        break;
253
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 247
diff changeset
   257
                    case 'S':
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 247
diff changeset
   258
                        command_line.request = c_GET_MAX_SLOTS;
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 247
diff changeset
   259
                        break;
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   260
                    default:
150
a615d7971bf6 Added -L (label)
viric@llimona
parents: 149
diff changeset
   261
                        fprintf(stderr, "Option %c missing argument.\n",
a615d7971bf6 Added -L (label)
viric@llimona
parents: 149
diff changeset
   262
                                optopt);
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   263
                        exit(-1);
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   264
                }
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   265
                break;
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   266
            case '?':
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   267
                fprintf(stderr, "Wrong option %c.\n", optopt);
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   268
                exit(-1);
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   269
        }
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   270
    }
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   271
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 65
diff changeset
   272
    command_line.command.num = 0;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 16
diff changeset
   273
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   274
    /* if the request is still the default option... 
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   275
     * (the default values should be centralized) */
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   276
    if (optind < argc && command_line.request == c_LIST)
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   277
    {
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   278
        command_line.request = c_QUEUE;
18
af4898956964 Now commands of any-length are accepted.
viric@llimona
parents: 16
diff changeset
   279
        get_command(optind, argc, argv);
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   280
    }
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   281
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   282
    if (command_line.request != c_SHOW_HELP &&
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   283
            command_line.request != c_SHOW_VERSION)
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   284
        command_line.need_server = 1;
55
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 53
diff changeset
   285
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 53
diff changeset
   286
    if ( ! command_line.store_output && ! command_line.should_go_background )
678ca291d545 Now the '-nf' doesn't leave a job in 'finished' state.
viric@llimona
parents: 53
diff changeset
   287
        command_line.should_keep_finished = 0;
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   288
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   289
    if ( command_line.send_output_by_mail && ((! command_line.store_output) ||
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   290
                command_line.gzip) )
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   291
    {
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   292
        fprintf(stderr,
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   293
                "For e-mail, you should store the output (not through gzip)\n");
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   294
        exit(-1);
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   295
    }
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   296
}
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   297
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   298
static void fill_first_3_handles()
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   299
{
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   300
    int tmp_pipe1[2];
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   301
    int tmp_pipe2[2];
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   302
    /* This will fill handles 0 and 1 */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   303
    pipe(tmp_pipe1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   304
    /* This will fill handles 2 and 3 */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   305
    pipe(tmp_pipe2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   306
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   307
    close(tmp_pipe2[1]);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   308
}
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   309
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   310
static void go_background()
11
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   311
{
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   312
    int pid;
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   313
    pid = fork();
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   314
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   315
    switch(pid)
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   316
    {
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   317
        case -1:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   318
            error("fork failed");
11
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   319
            break;
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   320
        case 0:
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   321
            close(0);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   322
            close(1);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   323
            close(2);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   324
            /* This is a weird thing. But we will later want to
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   325
             * allocate special files to the 0, 1 or 2 fds. It's
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   326
             * almost impossible, if other important things got
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   327
             * allocated here. */
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   328
            fill_first_3_handles();
133
4306e96f5906 Added setsid when going background.
viric@llimona
parents: 132
diff changeset
   329
            setsid();
11
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   330
            break;
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   331
        default:
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   332
            exit(0);
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   333
    }
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   334
}
bb94b9890001 Going to background at for new command queued.
lbatlle@npdl268.bpo.hp.com
parents: 8
diff changeset
   335
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   336
static void print_help(const char *cmd)
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   337
{
308
191898249d9a Taking the feedback from Jan Šmydke, about missing information in -h.
viric <viriketo@gmail.com>
parents: 307
diff changeset
   338
    printf("usage: %s [action] [-ngfmdE] [-L <lab>] [-D <id>] [cmd...]\n", cmd);
73
0c03786ff927 Added TS_ONFINISH.
viric@llimona
parents: 71
diff changeset
   339
    printf("Env vars:\n");
183
95d49e8a8cec Updating 'help' and some other related files to 0.5
viric@llimona
parents: 174
diff changeset
   340
    printf("  TS_SOCKET  the path to the unix socket used by the ts command.\n");
95d49e8a8cec Updating 'help' and some other related files to 0.5
viric@llimona
parents: 174
diff changeset
   341
    printf("  TS_MAILTO  where to mail the result (on -m). Local user by default.\n");
95d49e8a8cec Updating 'help' and some other related files to 0.5
viric@llimona
parents: 174
diff changeset
   342
    printf("  TS_MAXFINISHED  maximum finished jobs in the queue.\n");
278
1698b327528d Adding the limit of ts connections
viric@mandarina
parents: 277
diff changeset
   343
    printf("  TS_MAXCONN  maximum number of ts connections at once.\n");
183
95d49e8a8cec Updating 'help' and some other related files to 0.5
viric@llimona
parents: 174
diff changeset
   344
    printf("  TS_ONFINISH  binary called on job end (passes jobid, error, outfile, command).\n");
95d49e8a8cec Updating 'help' and some other related files to 0.5
viric@llimona
parents: 174
diff changeset
   345
    printf("  TS_ENV  command called on enqueue. Its output determines the job information.\n");
95d49e8a8cec Updating 'help' and some other related files to 0.5
viric@llimona
parents: 174
diff changeset
   346
    printf("  TS_SAVELIST  filename which will store the list, if the server dies.\n");
239
18301d7a56d4 As asked by Sergio Ballestreros, adding TS_SLOTS to set the default amount of
viric@vicerveza
parents: 237
diff changeset
   347
    printf("  TS_SLOTS   amount of jobs which can run at once, read on server start.\n");
308
191898249d9a Taking the feedback from Jan Šmydke, about missing information in -h.
viric <viriketo@gmail.com>
parents: 307
diff changeset
   348
    printf("  TMPDIR     directory where to place the output files and the default socket.\n");
52
7c6dc23a2a32 Better 'help'.
viric@llimona
parents: 51
diff changeset
   349
    printf("Actions:\n");
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   350
    printf("  -K       kill the task spooler server\n");
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   351
    printf("  -C       clear the list of finished jobs\n");
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   352
    printf("  -l       show the job list (default action)\n");
263
0d831e6cf8ef Making ts chdir to the socket directory.
viric@mandarina
parents: 260
diff changeset
   353
    printf("  -S [num] get/set the number of max simultaneous jobs of the server.\n");
204
cd474500b9e1 Removing the code related to tail -f and cat. Updated help.
lbatlle@npdl268.bpo.hp.com
parents: 203
diff changeset
   354
    printf("  -t [id]  \"tail -n 10 -f\" the output of the job. Last run if not specified.\n");
cd474500b9e1 Removing the code related to tail -f and cat. Updated help.
lbatlle@npdl268.bpo.hp.com
parents: 203
diff changeset
   355
    printf("  -c [id]  like -t, but shows all the lines. Last run if not specified.\n");
132
33bb1b314f8c conciser in help, regarding 'last jobs'.
viric@llimona
parents: 131
diff changeset
   356
    printf("  -p [id]  show the pid of the job. Last run if not specified.\n");
61
b8ca313cb00c Fixed help for "-o"
viric@llimona
parents: 58
diff changeset
   357
    printf("  -o [id]  show the output file. Of last job run, if not specified.\n");
151
b09bd82d283e Added proper help for the new features.
viric@llimona
parents: 150
diff changeset
   358
    printf("  -i [id]  show job information. Of last job run, if not specified.\n");
78
e4d5907f5aaf Added manpage and make install.
viric@llimona
parents: 76
diff changeset
   359
    printf("  -s [id]  show the job state. Of the last added, if not specified.\n");
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   360
    printf("  -r [id]  remove a job. The last added, if not specified.\n");
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   361
    printf("  -w [id]  wait for a job. The last added, if not specified.\n");
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   362
    printf("  -k [id]  send SIGTERM to the job process group. The last run, if not specified.\n");
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   363
    printf("  -u [id]  put that job first. The last added, if not specified.\n");
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   364
    printf("  -U <id-id>  swap two jobs in the queue.\n");
296
dc46c806c6f4 Add -B to the help message.
viric <viriketo@gmail.com>
parents: 295
diff changeset
   365
    printf("  -B       in case of full queue on the server, quit (2) instead of waiting.\n");
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   366
    printf("  -h       show this help\n");
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   367
    printf("  -V       show the program version\n");
52
7c6dc23a2a32 Better 'help'.
viric@llimona
parents: 51
diff changeset
   368
    printf("Options adding jobs:\n");
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   369
    printf("  -n       don't store the output of the command.\n");
307
55d08ba53400 Fixing the '-h' for '-E', and increasing the version to 0.7.2
viric <viriketo@gmail.com>
parents: 306
diff changeset
   370
    printf("  -E       Keep stderr apart, in a name like the output file, but adding '.e'.\n");
65
dced0efccc19 Added gzip output.
viric@llimona
parents: 63
diff changeset
   371
    printf("  -g       gzip the stored output (if not -n).\n");
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   372
    printf("  -f       don't fork into background.\n");
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   373
    printf("  -m       send the output by e-mail (uses sendmail).\n");
158
d449f07c7609 Better doc.
viric@mandarina
parents: 155
diff changeset
   374
    printf("  -d       the job will be run only if the job before ends well\n");
315
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 308
diff changeset
   375
    printf("  -D <id>  the job will be run only if the job of given id ends well.\n");
159
76293ced27b5 Updated manpage and help.
viric@mandarina
parents: 158
diff changeset
   376
    printf("  -L <lab> name this task with a label, to be distinguished on listing.\n");
315
2b3ed8fdfb12 Implementing the num_slots for newjob in the messages, but the server still does
viric <viriketo@gmail.com>
parents: 308
diff changeset
   377
    printf("  -N <num> number of slots required by the job (1 default).\n");
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   378
}
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   379
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   380
static void print_version()
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   381
{
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   382
    puts(version);
44
4dcf05746ece Better include files.
viric@llimona
parents: 42
diff changeset
   383
}
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   384
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   385
static void set_getopt_env()
48
630e26b09141 A bit better compilation in GNU systems.
viric@llimona
parents: 46
diff changeset
   386
{
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   387
    old_getopt_env = getenv("POSIXLY_CORRECT");
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   388
    putenv(getopt_env);
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   389
}
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   390
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   391
static void unset_getopt_env()
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   392
{
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   393
    if (old_getopt_env == NULL)
87
18dc656315eb Finally fixed the POSIXLY_CORRECT env problem
lbatlle@npdl268.bpo.hp.com
parents: 81
diff changeset
   394
    {
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   395
        /* Wipe the string from the environment */
87
18dc656315eb Finally fixed the POSIXLY_CORRECT env problem
lbatlle@npdl268.bpo.hp.com
parents: 81
diff changeset
   396
        putenv("POSIXLY_CORRECT");
18dc656315eb Finally fixed the POSIXLY_CORRECT env problem
lbatlle@npdl268.bpo.hp.com
parents: 81
diff changeset
   397
    }
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   398
    else
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   399
        sprintf(getopt_env, "POSIXLY_CORRECT=%s", old_getopt_env);
48
630e26b09141 A bit better compilation in GNU systems.
viric@llimona
parents: 46
diff changeset
   400
}
630e26b09141 A bit better compilation in GNU systems.
viric@llimona
parents: 46
diff changeset
   401
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   402
int main(int argc, char **argv)
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   403
{
38
768d009604b3 The program returns the errorlevel of the job, if it doesn't go to background.
viric@llimona
parents: 37
diff changeset
   404
    int errorlevel = 0;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   405
104
dc4dd9939238 Fixed error reporting.
viric@llimona
parents: 100
diff changeset
   406
    process_type = CLIENT;
dc4dd9939238 Fixed error reporting.
viric@llimona
parents: 100
diff changeset
   407
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   408
    set_getopt_env();
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   409
    /* This is needed in a gnu system, so getopt works well */
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   410
    default_command_line();
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   411
    parse_opts(argc, argv);
76
14bc35eee745 Fixed two bugs: POSIXLY_CORRECT=YES no more in the child's env, and a
viric@mandarina
parents: 73
diff changeset
   412
    unset_getopt_env();
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   413
95
d31aaee661d1 Protection against SIGPIPE. Block it.
viric@llimona
parents: 92
diff changeset
   414
    /* This will be inherited by the server, if it's run */
d31aaee661d1 Protection against SIGPIPE. Block it.
viric@llimona
parents: 92
diff changeset
   415
    ignore_sigpipe();
d31aaee661d1 Protection against SIGPIPE. Block it.
viric@llimona
parents: 92
diff changeset
   416
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   417
    if (command_line.need_server)
260
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   418
    {
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   419
        ensure_server_up();
260
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   420
        c_check_version();
ecd09b351170 Adding version control in the protocol. It can't check with older versions.
viric@mandarina
parents: 259
diff changeset
   421
    }
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   422
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   423
    switch(command_line.request)
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   424
    {
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   425
    case c_SHOW_VERSION:
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   426
        print_version(argv[0]);
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   427
        break;
36
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   428
    case c_SHOW_HELP:
f3b164620a3a Added help.
viric@llimona
parents: 35
diff changeset
   429
        print_help(argv[0]);
37
f2f6c6f0e86f Added version.
viric@llimona
parents: 36
diff changeset
   430
        break;
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   431
    case c_QUEUE:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   432
        if (command_line.command.num <= 0)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   433
            error("Tried to queue a void command. parameters: %i",
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   434
                    command_line.command.num);
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   435
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   436
            error("The command %i needs the server", command_line.request);
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 65
diff changeset
   437
        c_new_job();
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   438
        command_line.jobid = c_wait_newjob_ok();
62
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   439
        if (command_line.store_output)
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   440
        {
71
531666e297d7 Send e-letter implemented.
viric@llimona
parents: 69
diff changeset
   441
            printf("%i\n", command_line.jobid);
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   442
            fflush(stdout);
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   443
        }
62
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   444
        if (command_line.should_go_background)
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   445
        {
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   446
            go_background();
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 65
diff changeset
   447
            c_wait_server_commands();
62
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   448
        } else
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   449
        {
68
3ae9b38d7d30 Now the orders don't run under 'bash'. They run as is.
viric@llimona
parents: 65
diff changeset
   450
            errorlevel = c_wait_server_commands();
62
2b29d4666f6c Return the jobid in stdout.
viric@llimona
parents: 61
diff changeset
   451
        }
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   452
        break;
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   453
    case c_LIST:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   454
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   455
            error("The command %i needs the server", command_line.request);
8
03339adb7014 Some more code for execution.
viric@llimona
parents: 5
diff changeset
   456
        c_list_jobs();
5
bc5e251418f3 The LIST_LINEs are outputed by the client.
viric@llimona
parents: 3
diff changeset
   457
        c_wait_server_lines();
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   458
        break;
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   459
    case c_KILL_SERVER:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   460
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   461
            error("The command %i needs the server", command_line.request);
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   462
        c_shutdown_server();
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   463
        break;
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   464
    case c_CLEAR_FINISHED:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   465
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   466
            error("The command %i needs the server", command_line.request);
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 18
diff changeset
   467
        c_clear_finished();
31
1a6c732b0b71 The command line parsing has been simplified.
viric@llimona
parents: 30
diff changeset
   468
        break;
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   469
    case c_TAIL:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   470
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   471
            error("The command %i needs the server", command_line.request);
174
c112f67965fb Our implementation of -t (equivalent tail -f), which now
viric@llimona
parents: 166
diff changeset
   472
        errorlevel = c_tail();
32
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   473
        /* This will not return! */
3531439f2770 Tail works.
viric@llimona
parents: 31
diff changeset
   474
        break;
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   475
    case c_CAT:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   476
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   477
            error("The command %i needs the server", command_line.request);
203
664044b1de73 Making '-c' to behave as 'tail -f', but showing *all* the file.
lbatlle@npdl268.bpo.hp.com
parents: 199
diff changeset
   478
        errorlevel = c_cat();
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   479
        /* This will not return! */
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   480
        break;
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   481
    case c_SHOW_OUTPUT_FILE:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   482
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   483
            error("The command %i needs the server", command_line.request);
33
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   484
        c_show_output_file();
5c2d981f2f8e Added 'cat' and 'show output filename'
viric@llimona
parents: 32
diff changeset
   485
        break;
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   486
    case c_SHOW_PID:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   487
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   488
            error("The command %i needs the server", command_line.request);
35
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   489
        c_show_pid();
83d0da612dc4 Kill the running job works fine.
viric@llimona
parents: 33
diff changeset
   490
        break;
340
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   491
    case c_KILL_JOB:
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   492
        if (!command_line.need_server)
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   493
            error("The command %i needs the server", command_line.request);
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   494
        c_kill_job();
11c5a9e7b9a8 Adding -k, kill job (SIGTERM to process group).
viric <viriketo@gmail.com>
parents: 337
diff changeset
   495
        break;
146
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   496
    case c_INFO:
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   497
        if (!command_line.need_server)
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   498
            error("The command %i needs the server", command_line.request);
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   499
        c_show_info();
5e689cb593aa Bones of the "-i" parameter, job info.
viric@llimona
parents: 135
diff changeset
   500
        break;
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   501
    case c_REMOVEJOB:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   502
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   503
            error("The command %i needs the server", command_line.request);
41
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   504
        c_remove_job();
cad41574feda Added 'remove job'.
viric@llimona
parents: 40
diff changeset
   505
        break;
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   506
    case c_WAITJOB:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   507
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   508
            error("The command %i needs the server", command_line.request);
51
aa6e05d77537 '-w' returns the waited errorlevel. Added a testbench.
viric@llimona
parents: 49
diff changeset
   509
        errorlevel = c_wait_job();
42
f093d0964cf5 Added wait for jobs.
viric@llimona
parents: 41
diff changeset
   510
        break;
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   511
    case c_URGENT:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   512
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   513
            error("The command %i needs the server", command_line.request);
53
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   514
        c_move_urgent();
731c41817842 '-u' (urgency) implemented.
viric@llimona
parents: 52
diff changeset
   515
        break;
219
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   516
    case c_SET_MAX_SLOTS:
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   517
        c_send_max_slots(command_line.max_slots);
c24a1f5c1715 Adding hot-switchable amount of max_slots.
viric@mandarina
parents: 218
diff changeset
   518
        break;
253
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 247
diff changeset
   519
    case c_GET_MAX_SLOTS:
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 247
diff changeset
   520
        c_get_max_slots();
e9b153f4ae40 Making "-S" to return the number of slots set, if without additional argument.
viric@mandarina
parents: 247
diff changeset
   521
        break;
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   522
    case c_SWAP_JOBS:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   523
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   524
            error("The command %i needs the server", command_line.request);
66
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   525
        c_swap_jobs();
f70a27afd92e Adding "swap jobs" with -U. Fixed a big problem with fds 0, 1, 2.
viric@mandarina
parents: 65
diff changeset
   526
        break;
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   527
    case c_GET_STATE:
92
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   528
        if (!command_line.need_server)
05004c52ecff Better error reports on internal handled errors.
viric@llimona
parents: 87
diff changeset
   529
            error("The command %i needs the server", command_line.request);
63
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   530
        /* This will also print the state into stdout */
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   531
        c_get_state();
47be318f4cbc Added "-s" for querying the job state.
viric@llimona
parents: 62
diff changeset
   532
        break;
20
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 18
diff changeset
   533
    }
d85b4c0745fa "-c" added, for clearing the finished tasks' list.
viric@llimona
parents: 18
diff changeset
   534
30
ab88478a7e9b The commandline parameters are centered in a struct.
viric@llimona
parents: 29
diff changeset
   535
    if (command_line.need_server)
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   536
    {
3
2fb8a6bdd024 More code.
viric@llimona
parents: 2
diff changeset
   537
        close(server_socket);
2
602bd67df3aa Changed tabs to 4 spaces. Rule.
viric@llimona
parents: 1
diff changeset
   538
    }
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   539
38
768d009604b3 The program returns the errorlevel of the job, if it doesn't go to background.
viric@llimona
parents: 37
diff changeset
   540
    return errorlevel;
1
74928e2b27f4 Honta versio de ia strukturo.
viric@llimona
parents:
diff changeset
   541
}