mirror of
https://github.com/sheumann/hush.git
synced 2024-08-22 02:29:00 +00:00
Fix bugs related to finding PIDs.
-Erik
This commit is contained in:
parent
cbd0d625c7
commit
2ac2fae728
@ -1,4 +1,9 @@
|
|||||||
0.43
|
0.43
|
||||||
|
* Busybox can now work perfectly when /proc is disabled, thereby
|
||||||
|
saving a bunch of memory (kernel /proc support is not thin).
|
||||||
|
This is done by making use of some nice kernel patches I
|
||||||
|
wrote up to support the features that busybox requires and
|
||||||
|
that /proc usually provides.
|
||||||
* Wrote basename, killall, and uptime.
|
* Wrote basename, killall, and uptime.
|
||||||
* Added freeramdisk, which will free up all memory associated
|
* Added freeramdisk, which will free up all memory associated
|
||||||
with a ram disk. Contributed by Emanuele Caratti <wiz@iol.it>
|
with a ram disk. Contributed by Emanuele Caratti <wiz@iol.it>
|
||||||
@ -36,7 +41,8 @@
|
|||||||
* An initial telnet implementation was added by
|
* An initial telnet implementation was added by
|
||||||
Randolph Chung <tausq@debian.org>.
|
Randolph Chung <tausq@debian.org>.
|
||||||
* Fixed a bug where "sed 's/foo/bar/g'" (i.e. a script w/o a "-e")
|
* Fixed a bug where "sed 's/foo/bar/g'" (i.e. a script w/o a "-e")
|
||||||
would go into an infinite loop.
|
* ps now supports BB_FEATURE_AUTOWIDTH, and can adjust its width
|
||||||
|
to match the terminal (defaults to width=79 when this is off).
|
||||||
|
|
||||||
|
|
||||||
-Erik Andersen
|
-Erik Andersen
|
||||||
|
4
halt.c
4
halt.c
@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
extern int halt_main(int argc, char **argv)
|
extern int halt_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef BB_FEATURE_LINUXRC
|
||||||
/* don't assume init's pid == 1 */
|
/* don't assume init's pid == 1 */
|
||||||
exit(kill(findPidByName("init"), SIGUSR1));
|
exit(kill(findPidByName("init"), SIGUSR1));
|
||||||
|
#else
|
||||||
|
exit(kill(1, SIGUSR1));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
6
init.c
6
init.c
@ -336,10 +336,6 @@ static pid_t run(char *command, char *terminal, int get_enter)
|
|||||||
|
|
||||||
|
|
||||||
if ((pid = fork()) == 0) {
|
if ((pid = fork()) == 0) {
|
||||||
#ifdef DEBUG_INIT
|
|
||||||
pid_t shell_pgid = getpid();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Clean up */
|
/* Clean up */
|
||||||
close(0);
|
close(0);
|
||||||
close(1);
|
close(1);
|
||||||
@ -373,8 +369,8 @@ static pid_t run(char *command, char *terminal, int get_enter)
|
|||||||
* specifies.
|
* specifies.
|
||||||
*/
|
*/
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
#ifdef DEBUG_INIT
|
#ifdef DEBUG_INIT
|
||||||
|
pid_t shell_pgid = getpid();
|
||||||
message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
|
message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
|
||||||
command, shell_pgid, terminal);
|
command, shell_pgid, terminal);
|
||||||
#endif
|
#endif
|
||||||
|
@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
extern int halt_main(int argc, char **argv)
|
extern int halt_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef BB_FEATURE_LINUXRC
|
||||||
/* don't assume init's pid == 1 */
|
/* don't assume init's pid == 1 */
|
||||||
exit(kill(findPidByName("init"), SIGUSR1));
|
exit(kill(findPidByName("init"), SIGUSR1));
|
||||||
|
#else
|
||||||
|
exit(kill(1, SIGUSR1));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -336,10 +336,6 @@ static pid_t run(char *command, char *terminal, int get_enter)
|
|||||||
|
|
||||||
|
|
||||||
if ((pid = fork()) == 0) {
|
if ((pid = fork()) == 0) {
|
||||||
#ifdef DEBUG_INIT
|
|
||||||
pid_t shell_pgid = getpid();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Clean up */
|
/* Clean up */
|
||||||
close(0);
|
close(0);
|
||||||
close(1);
|
close(1);
|
||||||
@ -373,8 +369,8 @@ static pid_t run(char *command, char *terminal, int get_enter)
|
|||||||
* specifies.
|
* specifies.
|
||||||
*/
|
*/
|
||||||
char c;
|
char c;
|
||||||
|
|
||||||
#ifdef DEBUG_INIT
|
#ifdef DEBUG_INIT
|
||||||
|
pid_t shell_pgid = getpid();
|
||||||
message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
|
message(LOG, "Waiting for enter to start '%s' (pid %d, console %s)\r\n",
|
||||||
command, shell_pgid, terminal);
|
command, shell_pgid, terminal);
|
||||||
#endif
|
#endif
|
||||||
|
@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
extern int poweroff_main(int argc, char **argv)
|
extern int poweroff_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef BB_FEATURE_LINUXRC
|
||||||
/* don't assume init's pid == 1 */
|
/* don't assume init's pid == 1 */
|
||||||
exit(kill(findPidByName("init"), SIGUSR2));
|
exit(kill(findPidByName("init"), SIGUSR2));
|
||||||
|
#else
|
||||||
|
exit(kill(1, SIGUSR2));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -26,8 +26,12 @@
|
|||||||
|
|
||||||
extern int reboot_main(int argc, char **argv)
|
extern int reboot_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef BB_FEATURE_LINUXRC
|
||||||
/* don't assume init's pid == 1 */
|
/* don't assume init's pid == 1 */
|
||||||
exit(kill(findPidByName("init"), SIGINT));
|
exit(kill(findPidByName("init"), SIGINT));
|
||||||
|
#else
|
||||||
|
exit(kill(1, SIGINT));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
6
lsmod.c
6
lsmod.c
@ -25,9 +25,9 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
#if ! defined BB_FEATURE_USE_PROCFS
|
//#if ! defined BB_FEATURE_USE_PROCFS
|
||||||
#error Sorry, I depend on the /proc filesystem right now.
|
//#error Sorry, I depend on the /proc filesystem right now.
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
extern int lsmod_main(int argc, char **argv)
|
extern int lsmod_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -25,9 +25,9 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
|
||||||
#if ! defined BB_FEATURE_USE_PROCFS
|
//#if ! defined BB_FEATURE_USE_PROCFS
|
||||||
#error Sorry, I depend on the /proc filesystem right now.
|
//#error Sorry, I depend on the /proc filesystem right now.
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
extern int lsmod_main(int argc, char **argv)
|
extern int lsmod_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -26,6 +26,10 @@
|
|||||||
|
|
||||||
extern int poweroff_main(int argc, char **argv)
|
extern int poweroff_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef BB_FEATURE_LINUXRC
|
||||||
/* don't assume init's pid == 1 */
|
/* don't assume init's pid == 1 */
|
||||||
exit(kill(findPidByName("init"), SIGUSR2));
|
exit(kill(findPidByName("init"), SIGUSR2));
|
||||||
|
#else
|
||||||
|
exit(kill(1, SIGUSR2));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
53
procps/ps.c
53
procps/ps.c
@ -35,6 +35,8 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
|
||||||
#if ! defined BB_FEATURE_USE_DEVPS_N_DEVMTAB
|
#if ! defined BB_FEATURE_USE_DEVPS_N_DEVMTAB
|
||||||
|
|
||||||
@ -116,7 +118,15 @@ extern int ps_main(int argc, char **argv)
|
|||||||
char path[32], sbuf[512];
|
char path[32], sbuf[512];
|
||||||
char uidName[10] = "";
|
char uidName[10] = "";
|
||||||
char groupName[10] = "";
|
char groupName[10] = "";
|
||||||
int i, c;
|
int len, i, c;
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
struct winsize win = { 0, 0 };
|
||||||
|
int terminal_width = 0;
|
||||||
|
#else
|
||||||
|
#define terminal_width 79
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 1 && **(argv + 1) == '-')
|
if (argc > 1 && **(argv + 1) == '-')
|
||||||
usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
|
usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
|
||||||
@ -125,6 +135,12 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (!dir)
|
if (!dir)
|
||||||
fatalError("Can't open /proc");
|
fatalError("Can't open /proc");
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
ioctl(fileno(stdout), TIOCGWINSZ, &win);
|
||||||
|
if (win.ws_col > 0)
|
||||||
|
terminal_width = win.ws_col - 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
||||||
"State", "Command");
|
"State", "Command");
|
||||||
while ((entry = readdir(dir)) != NULL) {
|
while ((entry = readdir(dir)) != NULL) {
|
||||||
@ -146,21 +162,21 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (*groupName == '\0')
|
if (*groupName == '\0')
|
||||||
sprintf(groupName, "%d", p.rgid);
|
sprintf(groupName, "%d", p.rgid);
|
||||||
|
|
||||||
fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
|
len = fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
|
||||||
p.state);
|
p.state);
|
||||||
sprintf(path, "/proc/%s/cmdline", entry->d_name);
|
sprintf(path, "/proc/%s/cmdline", entry->d_name);
|
||||||
file = fopen(path, "r");
|
file = fopen(path, "r");
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
fatalError("Can't open %s: %s\n", path, strerror(errno));
|
fatalError("Can't open %s: %s\n", path, strerror(errno));
|
||||||
i = 0;
|
i = 0;
|
||||||
while (((c = getc(file)) != EOF) && (i < 53)) {
|
while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) {
|
||||||
i++;
|
i++;
|
||||||
if (c == '\0')
|
if (c == '\0')
|
||||||
c = ' ';
|
c = ' ';
|
||||||
putc(c, stdout);
|
putc(c, stdout);
|
||||||
}
|
}
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
fprintf(stdout, "%s", p.cmd);
|
fprintf(stdout, "[%s]", p.cmd);
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
@ -175,19 +191,24 @@ extern int ps_main(int argc, char **argv)
|
|||||||
* this one uses the nifty new devps kernel device.
|
* this one uses the nifty new devps kernel device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <linux/devps.h>
|
#include <linux/devps.h>
|
||||||
|
|
||||||
|
|
||||||
extern int ps_main(int argc, char **argv)
|
extern int ps_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char device[] = "/dev/ps";
|
char device[] = "/dev/ps";
|
||||||
int i, fd;
|
int i, j, len, fd;
|
||||||
pid_t num_pids;
|
pid_t num_pids;
|
||||||
pid_t* pid_array = NULL;
|
pid_t* pid_array = NULL;
|
||||||
struct pid_info info;
|
struct pid_info info;
|
||||||
char uidName[10] = "";
|
char uidName[10] = "";
|
||||||
char groupName[10] = "";
|
char groupName[10] = "";
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
struct winsize win = { 0, 0 };
|
||||||
|
int terminal_width = 0;
|
||||||
|
#else
|
||||||
|
#define terminal_width 79
|
||||||
|
#endif
|
||||||
|
|
||||||
if (argc > 1 && **(argv + 1) == '-')
|
if (argc > 1 && **(argv + 1) == '-')
|
||||||
usage("ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n");
|
usage("ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n");
|
||||||
@ -212,6 +233,12 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0)
|
if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0)
|
||||||
fatalError("\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
|
fatalError("\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
ioctl(fileno(stdout), TIOCGWINSZ, &win);
|
||||||
|
if (win.ws_col > 0)
|
||||||
|
terminal_width = win.ws_col - 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Print up a ps listing */
|
/* Print up a ps listing */
|
||||||
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
||||||
"State", "Command");
|
"State", "Command");
|
||||||
@ -232,13 +259,19 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (*groupName == '\0')
|
if (*groupName == '\0')
|
||||||
sprintf(groupName, "%ld", info.egid);
|
sprintf(groupName, "%ld", info.egid);
|
||||||
|
|
||||||
fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
|
len = fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
|
||||||
|
|
||||||
if (strlen(info.command_line) > 1)
|
if (strlen(info.command_line) > 1) {
|
||||||
|
for( j=0; j<(sizeof(info.command_line)-1) && j < (terminal_width-len); j++) {
|
||||||
|
if (*(info.command_line+j) == '\0' && *(info.command_line+j+1) != '\0') {
|
||||||
|
*(info.command_line+j) = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*(info.command_line+j) = '\0';
|
||||||
fprintf(stdout, "%s\n", info.command_line);
|
fprintf(stdout, "%s\n", info.command_line);
|
||||||
else
|
} else {
|
||||||
fprintf(stdout, "[%s]\n", info.name);
|
fprintf(stdout, "[%s]\n", info.name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free memory */
|
/* Free memory */
|
||||||
|
53
ps.c
53
ps.c
@ -35,6 +35,8 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <sys/ioctl.h>
|
||||||
|
|
||||||
|
|
||||||
#if ! defined BB_FEATURE_USE_DEVPS_N_DEVMTAB
|
#if ! defined BB_FEATURE_USE_DEVPS_N_DEVMTAB
|
||||||
|
|
||||||
@ -116,7 +118,15 @@ extern int ps_main(int argc, char **argv)
|
|||||||
char path[32], sbuf[512];
|
char path[32], sbuf[512];
|
||||||
char uidName[10] = "";
|
char uidName[10] = "";
|
||||||
char groupName[10] = "";
|
char groupName[10] = "";
|
||||||
int i, c;
|
int len, i, c;
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
struct winsize win = { 0, 0 };
|
||||||
|
int terminal_width = 0;
|
||||||
|
#else
|
||||||
|
#define terminal_width 79
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (argc > 1 && **(argv + 1) == '-')
|
if (argc > 1 && **(argv + 1) == '-')
|
||||||
usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
|
usage ("ps\n\nReport process status\n\nThis version of ps accepts no options.\n");
|
||||||
@ -125,6 +135,12 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (!dir)
|
if (!dir)
|
||||||
fatalError("Can't open /proc");
|
fatalError("Can't open /proc");
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
ioctl(fileno(stdout), TIOCGWINSZ, &win);
|
||||||
|
if (win.ws_col > 0)
|
||||||
|
terminal_width = win.ws_col - 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
||||||
"State", "Command");
|
"State", "Command");
|
||||||
while ((entry = readdir(dir)) != NULL) {
|
while ((entry = readdir(dir)) != NULL) {
|
||||||
@ -146,21 +162,21 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (*groupName == '\0')
|
if (*groupName == '\0')
|
||||||
sprintf(groupName, "%d", p.rgid);
|
sprintf(groupName, "%d", p.rgid);
|
||||||
|
|
||||||
fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
|
len = fprintf(stdout, "%5d %-8s %-8s %c ", p.pid, uidName, groupName,
|
||||||
p.state);
|
p.state);
|
||||||
sprintf(path, "/proc/%s/cmdline", entry->d_name);
|
sprintf(path, "/proc/%s/cmdline", entry->d_name);
|
||||||
file = fopen(path, "r");
|
file = fopen(path, "r");
|
||||||
if (file == NULL)
|
if (file == NULL)
|
||||||
fatalError("Can't open %s: %s\n", path, strerror(errno));
|
fatalError("Can't open %s: %s\n", path, strerror(errno));
|
||||||
i = 0;
|
i = 0;
|
||||||
while (((c = getc(file)) != EOF) && (i < 53)) {
|
while (((c = getc(file)) != EOF) && (i < (terminal_width-len))) {
|
||||||
i++;
|
i++;
|
||||||
if (c == '\0')
|
if (c == '\0')
|
||||||
c = ' ';
|
c = ' ';
|
||||||
putc(c, stdout);
|
putc(c, stdout);
|
||||||
}
|
}
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
fprintf(stdout, "%s", p.cmd);
|
fprintf(stdout, "[%s]", p.cmd);
|
||||||
fprintf(stdout, "\n");
|
fprintf(stdout, "\n");
|
||||||
}
|
}
|
||||||
closedir(dir);
|
closedir(dir);
|
||||||
@ -175,19 +191,24 @@ extern int ps_main(int argc, char **argv)
|
|||||||
* this one uses the nifty new devps kernel device.
|
* this one uses the nifty new devps kernel device.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/ioctl.h>
|
|
||||||
#include <linux/devps.h>
|
#include <linux/devps.h>
|
||||||
|
|
||||||
|
|
||||||
extern int ps_main(int argc, char **argv)
|
extern int ps_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
char device[] = "/dev/ps";
|
char device[] = "/dev/ps";
|
||||||
int i, fd;
|
int i, j, len, fd;
|
||||||
pid_t num_pids;
|
pid_t num_pids;
|
||||||
pid_t* pid_array = NULL;
|
pid_t* pid_array = NULL;
|
||||||
struct pid_info info;
|
struct pid_info info;
|
||||||
char uidName[10] = "";
|
char uidName[10] = "";
|
||||||
char groupName[10] = "";
|
char groupName[10] = "";
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
struct winsize win = { 0, 0 };
|
||||||
|
int terminal_width = 0;
|
||||||
|
#else
|
||||||
|
#define terminal_width 79
|
||||||
|
#endif
|
||||||
|
|
||||||
if (argc > 1 && **(argv + 1) == '-')
|
if (argc > 1 && **(argv + 1) == '-')
|
||||||
usage("ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n");
|
usage("ps-devps\n\nReport process status\n\nThis version of ps accepts no options.\n\n");
|
||||||
@ -212,6 +233,12 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0)
|
if (ioctl (fd, DEVPS_GET_PID_LIST, pid_array)<0)
|
||||||
fatalError("\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
|
fatalError("\nDEVPS_GET_PID_LIST: %s\n", strerror (errno));
|
||||||
|
|
||||||
|
#ifdef BB_FEATURE_AUTOWIDTH
|
||||||
|
ioctl(fileno(stdout), TIOCGWINSZ, &win);
|
||||||
|
if (win.ws_col > 0)
|
||||||
|
terminal_width = win.ws_col - 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Print up a ps listing */
|
/* Print up a ps listing */
|
||||||
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
fprintf(stdout, "%5s %-8s %-3s %5s %s\n", "PID", "Uid", "Gid",
|
||||||
"State", "Command");
|
"State", "Command");
|
||||||
@ -232,13 +259,19 @@ extern int ps_main(int argc, char **argv)
|
|||||||
if (*groupName == '\0')
|
if (*groupName == '\0')
|
||||||
sprintf(groupName, "%ld", info.egid);
|
sprintf(groupName, "%ld", info.egid);
|
||||||
|
|
||||||
fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
|
len = fprintf(stdout, "%5d %-8s %-8s %c ", info.pid, uidName, groupName, info.state);
|
||||||
|
|
||||||
if (strlen(info.command_line) > 1)
|
if (strlen(info.command_line) > 1) {
|
||||||
|
for( j=0; j<(sizeof(info.command_line)-1) && j < (terminal_width-len); j++) {
|
||||||
|
if (*(info.command_line+j) == '\0' && *(info.command_line+j+1) != '\0') {
|
||||||
|
*(info.command_line+j) = ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*(info.command_line+j) = '\0';
|
||||||
fprintf(stdout, "%s\n", info.command_line);
|
fprintf(stdout, "%s\n", info.command_line);
|
||||||
else
|
} else {
|
||||||
fprintf(stdout, "[%s]\n", info.name);
|
fprintf(stdout, "[%s]\n", info.name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free memory */
|
/* Free memory */
|
||||||
|
4
reboot.c
4
reboot.c
@ -26,8 +26,12 @@
|
|||||||
|
|
||||||
extern int reboot_main(int argc, char **argv)
|
extern int reboot_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
#ifdef BB_FEATURE_LINUXRC
|
||||||
/* don't assume init's pid == 1 */
|
/* don't assume init's pid == 1 */
|
||||||
exit(kill(findPidByName("init"), SIGINT));
|
exit(kill(findPidByName("init"), SIGINT));
|
||||||
|
#else
|
||||||
|
exit(kill(1, SIGINT));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
28
utility.c
28
utility.c
@ -1247,7 +1247,7 @@ extern int device_open(char *device, int mode)
|
|||||||
#endif /* BB_INIT BB_SYSLOGD */
|
#endif /* BB_INIT BB_SYSLOGD */
|
||||||
|
|
||||||
|
|
||||||
#if defined BB_INIT || defined BB_HALT || defined BB_REBOOT || defined BB_KILLALL
|
#if defined BB_KILLALL || defined BB_FEATURE_LINUXRC && ( defined BB_HALT || defined BB_REBOOT || defined BB_POWEROFF )
|
||||||
|
|
||||||
#ifdef BB_FEATURE_USE_DEVPS_N_DEVMTAB
|
#ifdef BB_FEATURE_USE_DEVPS_N_DEVMTAB
|
||||||
#include <linux/devps.h>
|
#include <linux/devps.h>
|
||||||
@ -1318,6 +1318,7 @@ extern pid_t findPidByName( char* pidName)
|
|||||||
#if ! defined BB_FEATURE_USE_PROCFS
|
#if ! defined BB_FEATURE_USE_PROCFS
|
||||||
#error Sorry, I depend on the /proc filesystem right now.
|
#error Sorry, I depend on the /proc filesystem right now.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* findPidByName()
|
/* findPidByName()
|
||||||
*
|
*
|
||||||
* This finds the pid of the specified process.
|
* This finds the pid of the specified process.
|
||||||
@ -1330,15 +1331,24 @@ extern pid_t findPidByName( char* pidName)
|
|||||||
*/
|
*/
|
||||||
extern pid_t findPidByName( char* pidName)
|
extern pid_t findPidByName( char* pidName)
|
||||||
{
|
{
|
||||||
pid_t thePid;
|
DIR *dir;
|
||||||
char filename[256];
|
struct dirent *next;
|
||||||
char buffer[256];
|
|
||||||
|
|
||||||
/* no need to opendir ;) */
|
dir = opendir("/proc");
|
||||||
for (thePid = 1; thePid < 65536; thePid++) {
|
if (!dir)
|
||||||
|
fatalError( "Cannot open /proc: %s\n", strerror (errno));
|
||||||
|
|
||||||
|
while ((next = readdir(dir)) != NULL) {
|
||||||
FILE *status;
|
FILE *status;
|
||||||
|
char filename[256];
|
||||||
|
char buffer[256];
|
||||||
|
|
||||||
sprintf(filename, "/proc/%d/cmdline", thePid);
|
/* If it isn't a number, we don't want it */
|
||||||
|
if (!isdigit(*next->d_name))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Now open the command line file */
|
||||||
|
sprintf(filename, "/proc/%s/status", next->d_name);
|
||||||
status = fopen(filename, "r");
|
status = fopen(filename, "r");
|
||||||
if (!status) {
|
if (!status) {
|
||||||
continue;
|
continue;
|
||||||
@ -1347,13 +1357,13 @@ extern pid_t findPidByName( char* pidName)
|
|||||||
fclose(status);
|
fclose(status);
|
||||||
|
|
||||||
if ((strstr(buffer, pidName) != NULL)) {
|
if ((strstr(buffer, pidName) != NULL)) {
|
||||||
return thePid;
|
return strtol(next->d_name, NULL, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* BB_FEATURE_USE_DEVPS_N_DEVMTAB */
|
#endif /* BB_FEATURE_USE_DEVPS_N_DEVMTAB */
|
||||||
#endif /* BB_INIT || BB_HALT || BB_REBOOT || KILLALL */
|
#endif /* BB_INIT || BB_HALT || BB_REBOOT || BB_KILLALL || BB_POWEROFF */
|
||||||
|
|
||||||
#if defined BB_GUNZIP \
|
#if defined BB_GUNZIP \
|
||||||
|| defined BB_GZIP \
|
|| defined BB_GZIP \
|
||||||
|
Loading…
Reference in New Issue
Block a user