mirror of
https://github.com/weechat/weechat.git
synced 2026-06-25 20:36:38 +02:00
core: add number of processes in command /sys waitpid
This commit is contained in:
+16
-8
@@ -6723,6 +6723,9 @@ COMMAND_CALLBACK(set)
|
||||
|
||||
COMMAND_CALLBACK(sys)
|
||||
{
|
||||
long value;
|
||||
char *error;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) pointer;
|
||||
(void) data;
|
||||
@@ -6732,8 +6735,7 @@ COMMAND_CALLBACK(sys)
|
||||
|
||||
if (string_strcmp (argv[1], "get") == 0)
|
||||
{
|
||||
COMMAND_MIN_ARGS(2, "get");
|
||||
|
||||
COMMAND_MIN_ARGS(3, "get");
|
||||
if (string_strcmp (argv[2], "rlimit") == 0)
|
||||
sys_display_rlimit ();
|
||||
else if (string_strcmp (argv[2], "rusage") == 0)
|
||||
@@ -6751,7 +6753,12 @@ COMMAND_CALLBACK(sys)
|
||||
|
||||
if (string_strcmp (argv[1], "waitpid") == 0)
|
||||
{
|
||||
sys_waitpid ();
|
||||
COMMAND_MIN_ARGS(3, "waitpid");
|
||||
error = NULL;
|
||||
value = strtol (argv[2], &error, 10);
|
||||
if (!error || error[0])
|
||||
COMMAND_ERROR;
|
||||
sys_waitpid ((int)value);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
@@ -9094,9 +9101,9 @@ command_init ()
|
||||
hook_command (
|
||||
NULL, "sys",
|
||||
N_("system actions"),
|
||||
"get rlimit|rusage"
|
||||
" || suspend"
|
||||
" || waitpid",
|
||||
N_("get rlimit|rusage"
|
||||
" || suspend"
|
||||
" || waitpid <number>"),
|
||||
CMD_ARGS_DESC(
|
||||
N_("raw[get]: display system info"),
|
||||
N_("raw[rlimit]: display resource limits "
|
||||
@@ -9105,10 +9112,11 @@ command_init ()
|
||||
N_("raw[suspend]: suspend WeeChat and go back to the shell, by sending "
|
||||
"signal SIGTSTP to the WeeChat process") ,
|
||||
N_("raw[waitpid]: acknowledge the end of children processes "
|
||||
"(to prevent \"zombie\" processes)")),
|
||||
"(to prevent \"zombie\" processes)"),
|
||||
N_("number: number of processes to clean")),
|
||||
"get rlimit|rusage"
|
||||
" || suspend"
|
||||
" || waitpid",
|
||||
" || waitpid 1|10|100|1000",
|
||||
&command_sys, NULL, NULL);
|
||||
hook_command (
|
||||
NULL, "toggle",
|
||||
|
||||
+5
-2
@@ -349,13 +349,16 @@ sys_display_rusage ()
|
||||
*/
|
||||
|
||||
void
|
||||
sys_waitpid ()
|
||||
sys_waitpid (int number_processes)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (number_processes < 1)
|
||||
return;
|
||||
|
||||
/* acknowledge the end of up to 42 forked processes */
|
||||
i = 0;
|
||||
while ((i < 42) && (waitpid (-1, NULL, WNOHANG) > 0))
|
||||
while ((i < number_processes) && (waitpid (-1, NULL, WNOHANG) > 0))
|
||||
{
|
||||
i++;
|
||||
}
|
||||
|
||||
+1
-1
@@ -31,6 +31,6 @@ struct t_rlimit_resource
|
||||
extern void sys_setrlimit ();
|
||||
extern void sys_display_rlimit ();
|
||||
extern void sys_display_rusage ();
|
||||
extern void sys_waitpid ();
|
||||
extern void sys_waitpid (int number_processes);
|
||||
|
||||
#endif /* WEECHAT_SYS_H */
|
||||
|
||||
@@ -484,7 +484,7 @@ xfer_network_child_kill (struct t_xfer *xfer)
|
||||
{
|
||||
kill (xfer->child_pid, SIGKILL);
|
||||
weechat_command (weechat_buffer_search_main (),
|
||||
"/mute /wait 100ms /sys waitpid");
|
||||
"/mute /wait 100ms /sys waitpid 10");
|
||||
xfer->child_pid = 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user