mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 14:27:37 +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
|
if uIP statistics are enabled (CONFIG_NET_STATISTICS), then
|
||||||
this command will also show the detailed state of uIP.
|
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>]
|
o losetup [-d <dev-path>] | [[-o <offset>] [-r] <ldev-path> <file-path>]
|
||||||
|
|
||||||
Setup or teardown the loop device:
|
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)
|
get CONFIG_NET && CONFIG_NET_UDP && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_NET_BUFSIZE >= 558 (see note 1)
|
||||||
help --
|
help --
|
||||||
ifconfig CONFIG_NET
|
ifconfig CONFIG_NET
|
||||||
|
kill !CONFIG_DISABLE_SIGNALS
|
||||||
losetup !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0
|
losetup !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0
|
||||||
ls CONFIG_NFILE_DESCRIPTORS > 0
|
ls CONFIG_NFILE_DESCRIPTORS > 0
|
||||||
mb,mh,mw ---
|
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_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_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_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_IFCONFIG, CONFIG_EXAMPLES_NSH_DISABLE_KILL, CONFIG_EXAMPLES_NSH_DISABLE_LOSETUP,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_MB, CONFIG_EXAMPLES_NSH_DISABLE_MEM, CONFIG_EXAMPLES_NSH_DISABLE_MKDIR,
|
CONFIG_EXAMPLES_NSH_DISABLE_LS, CONFIG_EXAMPLES_NSH_DISABLE_MB, CONFIG_EXAMPLES_NSH_DISABLE_MEM,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_MKFATFS, CONFIG_EXAMPLES_NSH_DISABLE_MKFIFO, CONFIG_EXAMPLES_NSH_DISABLE_MKRD,
|
CONFIG_EXAMPLES_NSH_DISABLE_MKDIR, CONFIG_EXAMPLES_NSH_DISABLE_MKFATFS, CONFIG_EXAMPLES_NSH_DISABLE_MKFIFO,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_MH, CONFIG_EXAMPLES_NSH_DISABLE_MOUNT, CONFIG_EXAMPLES_NSH_DISABLE_MW,
|
CONFIG_EXAMPLES_NSH_DISABLE_MKRD, CONFIG_EXAMPLES_NSH_DISABLE_MH, CONFIG_EXAMPLES_NSH_DISABLE_MOUNT,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_PS, CONFIG_EXAMPLES_NSH_DISABLE_PING, CONFIG_EXAMPLES_NSH_DISABLE_PUT,
|
CONFIG_EXAMPLES_NSH_DISABLE_MW, CONFIG_EXAMPLES_NSH_DISABLE_PS, CONFIG_EXAMPLES_NSH_DISABLE_PING,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_PWD, CONFIG_EXAMPLES_NSH_DISABLE_RM, CONFIG_EXAMPLES_NSH_DISABLE_RMDIR,
|
CONFIG_EXAMPLES_NSH_DISABLE_PUT, CONFIG_EXAMPLES_NSH_DISABLE_PWD, CONFIG_EXAMPLES_NSH_DISABLE_RM,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_SET, CONFIG_EXAMPLES_NSH_DISABLE_SH, CONFIG_EXAMPLES_NSH_DISABLE_SLEEP,
|
CONFIG_EXAMPLES_NSH_DISABLE_RMDIR, CONFIG_EXAMPLES_NSH_DISABLE_SET, CONFIG_EXAMPLES_NSH_DISABLE_SH,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_TEST, CONFIG_EXAMPLES_NSH_DISABLE_UMOUNT, CONFIG_EXAMPLES_NSH_DISABLE_UNSET,
|
CONFIG_EXAMPLES_NSH_DISABLE_SLEEP, CONFIG_EXAMPLES_NSH_DISABLE_TEST, CONFIG_EXAMPLES_NSH_DISABLE_UMOUNT,
|
||||||
CONFIG_EXAMPLES_NSH_DISABLE_USLEEP, CONFIG_EXAMPLES_NSH_DISABLE_WGET, CONFIG_EXAMPLES_NSH_DISABLE_XD
|
CONFIG_EXAMPLES_NSH_DISABLE_UNSET, CONFIG_EXAMPLES_NSH_DISABLE_USLEEP, CONFIG_EXAMPLES_NSH_DISABLE_WGET,
|
||||||
|
CONFIG_EXAMPLES_NSH_DISABLE_XD
|
||||||
|
|
||||||
NSH-Specific Configuration Settings
|
NSH-Specific Configuration Settings
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|||||||
+4
-1
@@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* examples/nsh/nsh.h
|
* 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>
|
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* 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 */
|
#endif /* CONFIG_DISABLE_ENVIRON */
|
||||||
|
|
||||||
#ifndef CONFIG_DISABLE_SIGNALS
|
#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
|
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_SLEEP
|
||||||
extern int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
extern int cmd_sleep(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv);
|
||||||
# endif
|
# endif
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* examples/nsh/nsh_main.c
|
* 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>
|
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -189,6 +189,12 @@ static const struct cmdmap_s g_cmdmap[] =
|
|||||||
# endif
|
# endif
|
||||||
#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)
|
#if CONFIG_NFILE_DESCRIPTORS > 0 && !defined(CONFIG_DISABLE_MOUNTPOINT)
|
||||||
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_LOSETUP
|
# ifndef CONFIG_EXAMPLES_NSH_DISABLE_LOSETUP
|
||||||
{ "losetup", cmd_losetup, 3, 6, "[-d <dev-path>] | [[-o <offset>] [-r] <dev-path> <file-path>]" },
|
{ "losetup", cmd_losetup, 3, 6, "[-d <dev-path>] | [[-o <offset>] [-r] <dev-path> <file-path>]" },
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* examples/nsh/nsh_proccmds.c
|
* 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>
|
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
@@ -43,6 +43,7 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "nsh.h"
|
#include "nsh.h"
|
||||||
|
|
||||||
@@ -175,6 +176,80 @@ int cmd_ps(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
* Name: cmd_sleep
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|||||||
+4
-4
@@ -1,7 +1,7 @@
|
|||||||
/************************************************************************
|
/************************************************************************
|
||||||
* sched/sig_kill.c
|
* 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>
|
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* 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)
|
if (pid <= 0)
|
||||||
{
|
{
|
||||||
*get_errno_ptr() = ENOSYS;
|
errno = ENOSYS;
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ int kill(pid_t pid, int signo)
|
|||||||
|
|
||||||
if (!GOOD_SIGNO(signo))
|
if (!GOOD_SIGNO(signo))
|
||||||
{
|
{
|
||||||
*get_errno_ptr() = EINVAL;
|
errno = EINVAL;
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ int kill(pid_t pid, int signo)
|
|||||||
sdbg("TCB=0x%08x signo=%d\n", stcb, signo);
|
sdbg("TCB=0x%08x signo=%d\n", stcb, signo);
|
||||||
if (!stcb)
|
if (!stcb)
|
||||||
{
|
{
|
||||||
*get_errno_ptr() = ESRCH;
|
errno = ESRCH;
|
||||||
sched_unlock();
|
sched_unlock();
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user