mirror of
https://github.com/apache/nuttx.git
synced 2026-05-20 12:33:27 +08:00
Add NSH kill command
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3322 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
+102
-74
File diff suppressed because it is too large
Load Diff
+15
-9
@@ -329,6 +329,10 @@ o ifconfig
|
||||
if uIP statistics are enabled (CONFIG_NET_STATISTICS), then
|
||||
this command will also show the detailed state of uIP.
|
||||
|
||||
o kill -<signal> <pid>
|
||||
|
||||
Send the <signal> to the task identified by <pid>.
|
||||
|
||||
o losetup [-d <dev-path>] | [[-o <offset>] [-r] <ldev-path> <file-path>]
|
||||
|
||||
Setup or teardown the loop device:
|
||||
@@ -769,6 +773,7 @@ Command Dependencies on Configuration Settings
|
||||
get CONFIG_NET && CONFIG_NET_UDP && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NET_BUFSIZE >= 558 (see note 1)
|
||||
help --
|
||||
ifconfig CONFIG_NET
|
||||
kill !CONFIG_DISABLE_SIGNALS
|
||||
losetup !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0
|
||||
ls CONFIG_NFILE_DESCRIPTORS > 0
|
||||
mb,mh,mw ---
|
||||
@@ -812,15 +817,16 @@ also allow it to squeeze into very small memory footprints.
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_CAT, CONFIG_EXAMPLES_NSH_DISABLE_CD, CONFIG_EXAMPLES_NSH_DISABLE_CP,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_DD, CONFIG_EXAMPLES_NSH_DISABLE_ECHO, CONFIG_EXAMPLES_NSH_DISABLE_EXEC,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_EXIT, CONFIG_EXAMPLES_NSH_DISABLE_GET, CONFIG_EXAMPLES_NSH_DISABLE_HELP,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_IFCONFIG, CONFIG_EXAMPLES_NSH_DISABLE_LOSETUP, CONFIG_EXAMPLES_NSH_DISABLE_LS,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_MB, CONFIG_EXAMPLES_NSH_DISABLE_MEM, CONFIG_EXAMPLES_NSH_DISABLE_MKDIR,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_MKFATFS, CONFIG_EXAMPLES_NSH_DISABLE_MKFIFO, CONFIG_EXAMPLES_NSH_DISABLE_MKRD,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_MH, CONFIG_EXAMPLES_NSH_DISABLE_MOUNT, CONFIG_EXAMPLES_NSH_DISABLE_MW,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_PS, CONFIG_EXAMPLES_NSH_DISABLE_PING, CONFIG_EXAMPLES_NSH_DISABLE_PUT,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_PWD, CONFIG_EXAMPLES_NSH_DISABLE_RM, CONFIG_EXAMPLES_NSH_DISABLE_RMDIR,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_SET, CONFIG_EXAMPLES_NSH_DISABLE_SH, CONFIG_EXAMPLES_NSH_DISABLE_SLEEP,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_TEST, CONFIG_EXAMPLES_NSH_DISABLE_UMOUNT, CONFIG_EXAMPLES_NSH_DISABLE_UNSET,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_USLEEP, CONFIG_EXAMPLES_NSH_DISABLE_WGET, CONFIG_EXAMPLES_NSH_DISABLE_XD
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_IFCONFIG, CONFIG_EXAMPLES_NSH_DISABLE_KILL, CONFIG_EXAMPLES_NSH_DISABLE_LOSETUP,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_LS, CONFIG_EXAMPLES_NSH_DISABLE_MB, CONFIG_EXAMPLES_NSH_DISABLE_MEM,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_MKDIR, CONFIG_EXAMPLES_NSH_DISABLE_MKFATFS, CONFIG_EXAMPLES_NSH_DISABLE_MKFIFO,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_MKRD, CONFIG_EXAMPLES_NSH_DISABLE_MH, CONFIG_EXAMPLES_NSH_DISABLE_MOUNT,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_MW, CONFIG_EXAMPLES_NSH_DISABLE_PS, CONFIG_EXAMPLES_NSH_DISABLE_PING,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_PUT, CONFIG_EXAMPLES_NSH_DISABLE_PWD, CONFIG_EXAMPLES_NSH_DISABLE_RM,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_RMDIR, CONFIG_EXAMPLES_NSH_DISABLE_SET, CONFIG_EXAMPLES_NSH_DISABLE_SH,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_SLEEP, CONFIG_EXAMPLES_NSH_DISABLE_TEST, CONFIG_EXAMPLES_NSH_DISABLE_UMOUNT,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_UNSET, CONFIG_EXAMPLES_NSH_DISABLE_USLEEP, CONFIG_EXAMPLES_NSH_DISABLE_WGET,
|
||||
CONFIG_EXAMPLES_NSH_DISABLE_XD
|
||||
|
||||
NSH-Specific Configuration Settings
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
+4
-1
@@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* examples/nsh/nsh.h
|
||||
*
|
||||
* Copyright (C) 2007-2010 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007-2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -474,6 +474,9 @@ extern int cmd_lbracket(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
#endif /* CONFIG_DISABLE_ENVIRON */
|
||||
|
||||
#ifndef CONFIG_DISABLE_SIGNALS
|
||||
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_KILL
|
||||
extern int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_SLEEP
|
||||
extern int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||
# endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* examples/nsh/nsh_main.c
|
||||
*
|
||||
* Copyright (C) 2007-2010 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007-2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -189,6 +189,12 @@ static const struct cmdmap_s g_cmdmap[] =
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DISABLE_SIGNALS
|
||||
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_SLEEP
|
||||
{ "kill", cmd_kill, 3, 3, "kill -<signal> <pid>" },
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)
|
||||
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_LOSETUP
|
||||
{ "losetup", cmd_losetup, 3, 6, "[-d <dev-path>] | [[-o <offset>] [-r] <dev-path> <file-path>]" },
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/****************************************************************************
|
||||
* examples/nsh/nsh_proccmds.c
|
||||
*
|
||||
* Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007-2009, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -43,6 +43,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sched.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "nsh.h"
|
||||
|
||||
@@ -175,6 +176,80 @@ int cmd_ps(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_kill
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef CONFIG_DISABLE_SIGNALS
|
||||
#ifndef CONFIG_EXAMPLES_NSH_DISABLE_KILL
|
||||
int cmd_kill(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
||||
{
|
||||
char *ptr;
|
||||
char *endptr;
|
||||
long signal;
|
||||
long pid;
|
||||
|
||||
/* Check incoming parameters. The first parameter should be "-<signal>" */
|
||||
|
||||
ptr = argv[1];
|
||||
if (*ptr != '-' || ptr[1] < '0' || ptr[1] > '9')
|
||||
{
|
||||
goto invalid_arg;
|
||||
}
|
||||
|
||||
/* Extract the signal number */
|
||||
|
||||
signal = strtol(&ptr[1], &endptr, 0);
|
||||
|
||||
/* The second parameter should be <pid> */
|
||||
|
||||
ptr = argv[2];
|
||||
if (*ptr < '0' || *ptr > '9')
|
||||
{
|
||||
goto invalid_arg;
|
||||
}
|
||||
|
||||
/* Extract athe pid */
|
||||
|
||||
pid = strtol(ptr, &endptr, 0);
|
||||
|
||||
/* Send the signal. Kill return values:
|
||||
*
|
||||
* EINVAL An invalid signal was specified.
|
||||
* EPERM The process does not have permission to send the signal to any
|
||||
* of the target processes.
|
||||
* ESRCH The pid or process group does not exist.
|
||||
* ENOSYS Do not support sending signals to process groups.
|
||||
*/
|
||||
|
||||
if (kill((pid_t)pid, (int)signal) == 0)
|
||||
{
|
||||
return OK;
|
||||
}
|
||||
|
||||
switch (errno)
|
||||
{
|
||||
case EINVAL:
|
||||
goto invalid_arg;
|
||||
|
||||
case ESRCH:
|
||||
nsh_output(vtbl, g_fmtnosuch, argv[0], "task", argv[2]);
|
||||
return ERROR;
|
||||
|
||||
case EPERM:
|
||||
case ENOSYS:
|
||||
default:
|
||||
nsh_output(vtbl, g_fmtcmdfailed, argv[0], "kill", NSH_ERRNO);
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
invalid_arg:
|
||||
nsh_output(vtbl, g_fmtarginvalid, argv[0]);
|
||||
return ERROR;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: cmd_sleep
|
||||
****************************************************************************/
|
||||
|
||||
+4
-4
@@ -1,7 +1,7 @@
|
||||
/************************************************************************
|
||||
* sched/sig_kill.c
|
||||
*
|
||||
* Copyright (C) 2007, 2009 Gregory Nutt. All rights reserved.
|
||||
* Copyright (C) 2007, 2009, 2011 Gregory Nutt. All rights reserved.
|
||||
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -96,7 +96,7 @@ int kill(pid_t pid, int signo)
|
||||
|
||||
if (pid <= 0)
|
||||
{
|
||||
*get_errno_ptr() = ENOSYS;
|
||||
errno = ENOSYS;
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ int kill(pid_t pid, int signo)
|
||||
|
||||
if (!GOOD_SIGNO(signo))
|
||||
{
|
||||
*get_errno_ptr() = EINVAL;
|
||||
errno = EINVAL;
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ int kill(pid_t pid, int signo)
|
||||
sdbg("TCB=0x%08x signo=%d\n", stcb, signo);
|
||||
if (!stcb)
|
||||
{
|
||||
*get_errno_ptr() = ESRCH;
|
||||
errno = ESRCH;
|
||||
sched_unlock();
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user