[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [tyndur-devel] [PATCH] neuer shell-Befehl: killall



An und für sich schön, nur sendet killall standardmäßig (unter *nix)
TERM, dein killall killt die Prozesse aber einfach gnadenlos - sollte
man vielleicht noch einmal überdenken/überarbeiten, sodass auch
vielleicht
andere Signale möglich sind.

Und der Copyright-Header ist falsch, das Jahr stimmt nicht und du bist
glaube ich nicht Kevin ;-)

On Wed, Mar 27, 2013 at 10:46:57PM +0100, Stefan Linke wrote:
> + Neuen Shell-Befehl killall implementiert, der alle Prozesse mit gegebenem Namen killt.
> 
> Signed-off-by: Stefan Linke <particleflux@xxxxxxxxx>
> ---
>  src/modules/c/shell/cmds/killall.c | 118 +++++++++++++++++++++++++++++++++++++
>  src/modules/c/shell/lang/lang_en.c |  14 +++++
>  src/modules/c/shell/lang/resstr.h  |   5 ++
>  src/modules/c/shell/shell.c        |   1 +
>  src/modules/c/shell/shell.h        |   1 +
>  5 files changed, 139 insertions(+)
>  create mode 100644 src/modules/c/shell/cmds/killall.c
> 
> diff --git a/src/modules/c/shell/cmds/killall.c b/src/modules/c/shell/cmds/killall.c
> new file mode 100644
> index 0000000..48eec14
> --- /dev/null
> +++ b/src/modules/c/shell/cmds/killall.c
> @@ -0,0 +1,118 @@
> +/*
> + * Copyright (c) 2009 The tyndur Project. All rights reserved.
> + *
> + * This code is derived from software contributed to the tyndur Project
> + * by Kevin Wolf
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + * 3. All advertising materials mentioning features or use of this software
> + *    must display the following acknowledgement:
> + *     This product includes software developed by the tyndur Project
> + *     and its contributors.
> + * 4. Neither the name of the tyndur Project nor the names of its
> + *    contributors may be used to endorse or promote products derived
> + *    from this software without specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
> + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
> + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
> + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR
> + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
> + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
> + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
> + * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
> + * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
> + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
> + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
> + */
> +
> +#include <stdlib.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <syscall.h>
> +#include <lost/config.h>
> +
> +#include <errno.h>
> +#include <signal.h>
> +#include <tms.h>
> +
> +static void killall_display_usage(void);
> +
> +#ifdef CONFIG_SHELL_BUILTIN_ONLY
> +    int shell_command_killall(int argc, char* argv[], const char* args)
> +#else
> +    int main(int argc, char* argv[])
> +#endif
> +{
> +    int ret=0,i=0,fail=0,matches=0;
> +    task_info_t *task_info = NULL;
> +    char *process;
> +    char copied_cmdline[255];
> +
> +    if (argc < 2) {
> +        killall_display_usage();
> +        return -1;
> +    }
> +
> +    task_info = enumerate_tasks();
> +
> +    if (task_info == NULL) {
> +        return EXIT_FAILURE;
> +    }
> +
> +
> +    for (i = 0; i < task_info->task_count; ++i) {
> +        strncpy(copied_cmdline, task_info->tasks[i].cmdline, 255);
> +
> +        process = strtok((char *) task_info->tasks[i].cmdline, " ");
> +        process = process == NULL
> +                ? strrchr(task_info->tasks[i].cmdline, '/')
> +                : strrchr(process, '/');
> +        ++process;
> +
> +        if (strcmp(argv[1], process) == 0) {
> +            ++matches;
> +            ret = kill(task_info->tasks[i].pid, SIGTERM);
> +
> +            if (ret < 0) {
> +                printf(TMS(killall_cant_kill, 
> +                        "Konnte pid %d - %s nicht beenden: %s (%s)\n"),
> +                        task_info->tasks[i].pid, errno, strerror(errno));
> +
> +                if (!fail) {
> +                    fail = 1;
> +                }
> +            } else {
> +                printf(TMS(killall_killed, "pid %d beendet\n"), 
> +                       task_info->tasks[i].pid);
> +            }
> +        }
> +
> +        process = NULL;
> +    }
> +
> +    mem_free(task_info, task_info->info_size);
> +
> +    if (matches == 0) {
> +        printf(TMS(killall_not_found, "Kein passender Prozess gefunden\n"));
> +    }
> +
> +    if (fail) {
> +        return EXIT_FAILURE;
> +    }
> +
> +    return EXIT_SUCCESS;
> +}
> +
> +static void killall_display_usage()
> +{
> +    printf(TMS(killall_usage, "Aufruf: killall <name>\n"));
> +}
> +
> diff --git a/src/modules/c/shell/lang/lang_en.c b/src/modules/c/shell/lang/lang_en.c
> index 3366190..c16abcf 100644
> --- a/src/modules/c/shell/lang/lang_en.c
> +++ b/src/modules/c/shell/lang/lang_en.c
> @@ -250,6 +250,20 @@ static const struct tms_strings dict[] = {
>  
>  
>  
> +    &__tms_killall_usage,
> +    "usage: killall <name>\n",
> +
> +    &__tms_killall_not_found,
> +    "no matching process found\n",
> +
> +    &__tms_killall_killed,
> +    "pid %d killed\n",
> +
> +    &__tms_killall_cant_kill,
> +    "couldn't kill pid %d - %s: %s (%s)\n",
> +
> +
> +
>      &__tms_ln_usage,
>      "\nUsage: ln <target> <link-path>\n\n"
>      "Create hardlink to file/directory <target> at <link-path>.\n",
> diff --git a/src/modules/c/shell/lang/resstr.h b/src/modules/c/shell/lang/resstr.h
> index 5a11d64..fdff7b9 100644
> --- a/src/modules/c/shell/lang/resstr.h
> +++ b/src/modules/c/shell/lang/resstr.h
> @@ -85,6 +85,11 @@ extern void* __tms_kill_usage;
>  extern void* __tms_kill_not_found;
>  extern void* __tms_kill_error;
>  
> +extern void* __tms_killall_usage;
> +extern void* __tms_killall_not_found;
> +extern void* __tms_killall_cant_kill;
> +extern void* __tms_killall_killed;
> +
>  extern void* __tms_ln_usage;
>  extern void* __tms_ln_error;
>  
> diff --git a/src/modules/c/shell/shell.c b/src/modules/c/shell/shell.c
> index 55a3f3b..cdca2f1 100644
> --- a/src/modules/c/shell/shell.c
> +++ b/src/modules/c/shell/shell.c
> @@ -87,6 +87,7 @@ shell_command_t shell_commands[] = {
>      {"echo",        &shell_command_echo},
>      {"free",        &shell_command_free},
>      {"kill",        &shell_command_kill},
> +    {"killall",     &shell_command_killall},
>      {"ls",          &shell_command_ls},
>      {"mkdir",       &shell_command_mkdir},
>      {"pipe",        &shell_command_pipe},
> diff --git a/src/modules/c/shell/shell.h b/src/modules/c/shell/shell.h
> index 40f91c9..8e94409 100644
> --- a/src/modules/c/shell/shell.h
> +++ b/src/modules/c/shell/shell.h
> @@ -68,6 +68,7 @@ int shell_command_clear(int argc, char* argv[], const char* args);
>      int shell_command_echo(int argc, char* argv[], const char* args);
>      int shell_command_free(int argc, char* argv[], const char* args);
>      int shell_command_kill(int argc, char* argv[], const char* args);
> +    int shell_command_killall(int argc, char* argv[], const char* args);
>      int shell_command_ls(int argc, char* argv[], const char* args);
>      int shell_command_mkdir(int argc, char* argv[], const char* args);
>      int shell_command_pipe(int argc, char* argv[], const char* args);
> -- 
> 1.8.1.5
> 
> _______________________________________________
> tyndur-devel mailing list
> tyndur-devel@xxxxxxxxxx
> http://list.tyndur.org/mailman/listinfo/tyndur-devel

Attachment: pgpGzAqbR9Ck4.pgp
Description: PGP signature