All of lore.kernel.org
 help / color / mirror / Atom feed
From: Namhyung Kim <namhyung@kernel.org>
To: Ian Rogers <irogers@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>,
	Ingo Molnar <mingo@redhat.com>,
	Arnaldo Carvalho de Melo <acme@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Jiri Olsa <jolsa@kernel.org>,
	Adrian Hunter <adrian.hunter@intel.com>,
	Kan Liang <kan.liang@linux.intel.com>,
	James Clark <james.clark@linaro.org>,
	Howard Chu <howardchu95@gmail.com>,
	Athira Jajeev <atrajeev@linux.vnet.ibm.com>,
	Michael Petlan <mpetlan@redhat.com>,
	Veronika Molnarova <vmolnaro@redhat.com>,
	Dapeng Mi <dapeng1.mi@linux.intel.com>,
	Thomas Richter <tmricht@linux.ibm.com>,
	Ilya Leoshkevich <iii@linux.ibm.com>,
	Colin Ian King <colin.i.king@gmail.com>,
	Weilin Wang <weilin.wang@intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v3 1/9] tools subcmd: Add non-waitpid check_if_command_finished()
Date: Wed, 23 Oct 2024 15:48:44 -0700	[thread overview]
Message-ID: <Zxl9TNHCm6Ymdw9a@google.com> (raw)
In-Reply-To: <20241018054719.1004128-2-irogers@google.com>

On Thu, Oct 17, 2024 at 10:47:11PM -0700, Ian Rogers wrote:
> Using waitpid can cause stdout/stderr of the child process to be
> lost. Use Linux's /prod/<pid>/status file to determine if the process
> has reached the zombie state. Use the 'status' file rather than 'stat'
> to avoid issues around skipping the process name.
> 
> Tested-by: James Clark <james.clark@linaro.org>
> Signed-off-by: Ian Rogers <irogers@google.com>
> ---
>  tools/lib/subcmd/run-command.c | 33 +++++++++++++++++++++++++++++++++
>  1 file changed, 33 insertions(+)
> 
> diff --git a/tools/lib/subcmd/run-command.c b/tools/lib/subcmd/run-command.c
> index 4e3a557a2f37..0a764c25c384 100644
> --- a/tools/lib/subcmd/run-command.c
> +++ b/tools/lib/subcmd/run-command.c
> @@ -2,6 +2,7 @@
>  #include <unistd.h>
>  #include <sys/types.h>
>  #include <sys/stat.h>
> +#include <ctype.h>
>  #include <fcntl.h>
>  #include <string.h>
>  #include <linux/string.h>
> @@ -217,8 +218,40 @@ static int wait_or_whine(struct child_process *cmd, bool block)
>  
>  int check_if_command_finished(struct child_process *cmd)
>  {
> +#ifdef __linux__

Well.. I still don't like this part.  But I can live with that as I want
the improvements in the test much more. :)

Thanks,
Namhyung


> +	char filename[FILENAME_MAX + 12];
> +	char status_line[256];
> +	FILE *status_file;
> +
> +	/*
> +	 * Check by reading /proc/<pid>/status as calling waitpid causes
> +	 * stdout/stderr to be closed and data lost.
> +	 */
> +	sprintf(filename, "/proc/%d/status", cmd->pid);
> +	status_file = fopen(filename, "r");
> +	if (status_file == NULL) {
> +		/* Open failed assume finish_command was called. */
> +		return true;
> +	}
> +	while (fgets(status_line, sizeof(status_line), status_file) != NULL) {
> +		char *p;
> +
> +		if (strncmp(status_line, "State:", 6))
> +			continue;
> +
> +		fclose(status_file);
> +		p = status_line + 6;
> +		while (isspace(*p))
> +			p++;
> +		return *p == 'Z' ? 1 : 0;
> +	}
> +	/* Read failed assume finish_command was called. */
> +	fclose(status_file);
> +	return 1;
> +#else
>  	wait_or_whine(cmd, /*block=*/false);
>  	return cmd->finished;
> +#endif
>  }
>  
>  int finish_command(struct child_process *cmd)
> -- 
> 2.47.0.105.g07ac214952-goog
> 

  reply	other threads:[~2024-10-23 22:48 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-18  5:47 [PATCH v3 0/9] Run tests in parallel showing number of tests running Ian Rogers
2024-10-18  5:47 ` [PATCH v3 1/9] tools subcmd: Add non-waitpid check_if_command_finished() Ian Rogers
2024-10-23 22:48   ` Namhyung Kim [this message]
2024-10-18  5:47 ` [PATCH v3 2/9] perf test: Display number of active running tests Ian Rogers
2024-10-18  5:47 ` [PATCH v3 3/9] perf test: Reduce scope of parallel variable Ian Rogers
2024-10-18  5:47 ` [PATCH v3 4/9] perf test: Avoid list test blocking on writing to stdout Ian Rogers
2024-10-18  5:47 ` [PATCH v3 5/9] perf test: Tag parallel failing shell tests with "(exclusive)" Ian Rogers
2024-10-18  5:47 ` [PATCH v3 6/9] perf test: Add a signal handler around running a test Ian Rogers
2024-10-18  5:47 ` [PATCH v3 7/9] perf test: Run parallel tests in two passes Ian Rogers
2024-10-18  5:47 ` [PATCH v3 8/9] perf test: Make parallel testing the default Ian Rogers
2024-10-18  5:47 ` [PATCH v3 9/9] perf test: Add a signal handler to kill forked child processes Ian Rogers
2024-10-23 22:57 ` [PATCH v3 0/9] Run tests in parallel showing number of tests running Namhyung Kim

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Zxl9TNHCm6Ymdw9a@google.com \
    --to=namhyung@kernel.org \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=atrajeev@linux.vnet.ibm.com \
    --cc=colin.i.king@gmail.com \
    --cc=dapeng1.mi@linux.intel.com \
    --cc=howardchu95@gmail.com \
    --cc=iii@linux.ibm.com \
    --cc=irogers@google.com \
    --cc=james.clark@linaro.org \
    --cc=jolsa@kernel.org \
    --cc=kan.liang@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@redhat.com \
    --cc=mpetlan@redhat.com \
    --cc=peterz@infradead.org \
    --cc=tmricht@linux.ibm.com \
    --cc=vmolnaro@redhat.com \
    --cc=weilin.wang@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.