1
0
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:
Sébastien Helleu
2023-10-22 21:02:41 +02:00
parent d6343020aa
commit 3cc400a9d6
19 changed files with 123 additions and 27 deletions
+16 -8
View File
@@ -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
View File
@@ -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
View File
@@ -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 */
+1 -1
View File
@@ -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;
}