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@arm.com>,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v2 1/2] tools subcmd: Add non-waitpid check_if_command_finished()
Date: Sat, 13 Jul 2024 09:59:58 -0500 [thread overview]
Message-ID: <ZpKWbtXQTXwzGLw-@google.com> (raw)
In-Reply-To: <CAP-5=fXZGTbXZkyW7QLTYU6vZkiiTSvJrBigcN=QYiaP3C9n5A@mail.gmail.com>
On Fri, Jul 12, 2024 at 02:19:58PM -0700, Ian Rogers wrote:
> On Fri, Jul 12, 2024 at 1:33 PM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > Hi Ian,
> >
> > On Tue, Jul 02, 2024 at 09:24:50PM -0700, Ian Rogers wrote:
> > > On Tue, Jul 2, 2024 at 8:24 PM Namhyung Kim <namhyung@kernel.org> wrote:
> > > >
> > > > Hi Ian,
> > > >
> > > > On Sun, Jun 30, 2024 at 09:42:35PM -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.
> > > > >
> > > > > 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..ec06683e77a0 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__
> > > >
> > > > Is this really necessary? I don't think we plan to support other OS..
> > >
> > > I don't think it'd be unreasonable to say run "perf report" on
> > > Windows, or using wasm inside a web browser. Part of the reason for
> > > doing things this way was to keep the WNOHANG logic although this
> > > change no longer uses it for __linux__.
> >
> > I'm not sure we are ready to run it on other platforms. So I think
> > it's better simply remove it for now.
>
> So in the office hours there was some discussion with a potential new
> contributor whose development platform is OS/X. It's fairly obvious
> this code can't work on anything but Linux and using #error feels
> annoying. The waitpid code is tested and has a known issue, but I
> think it is better than just breaking anyone not on Linux.
I feel like it's a potential issue and should be handled by the
potentiall contributor. Until that happens, we can assume Linux
and keep the code minimal.
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';
> > > > > + }
> > > > > + /* Read failed assume finish_command was called. */
> > > > > + fclose(status_file);
> > > > > + return true;
> > > > > +#else
> > > > > wait_or_whine(cmd, /*block=*/false);
> > > > > return cmd->finished;
> > > > > +#endif
> > > > > }
> > > > >
> > > > > int finish_command(struct child_process *cmd)
> > > > > --
> > > > > 2.45.2.803.g4e1b14247a-goog
> > > > >
next prev parent reply other threads:[~2024-07-13 15:00 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-07-01 4:42 [PATCH v2 0/2] perf test: Display remaining tests while waiting Ian Rogers
2024-07-01 4:42 ` [PATCH v2 1/2] tools subcmd: Add non-waitpid check_if_command_finished() Ian Rogers
2024-07-03 3:23 ` Namhyung Kim
2024-07-03 4:24 ` Ian Rogers
2024-07-12 20:33 ` Namhyung Kim
2024-07-12 21:19 ` Ian Rogers
2024-07-13 14:59 ` Namhyung Kim [this message]
2024-07-14 18:13 ` Ian Rogers
2024-07-01 4:42 ` [PATCH v2 2/2] perf test: Display number of remaining tests Ian Rogers
2024-07-03 3:39 ` Namhyung Kim
2024-07-03 4:30 ` Ian Rogers
2024-07-03 21:23 ` 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=ZpKWbtXQTXwzGLw-@google.com \
--to=namhyung@kernel.org \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=irogers@google.com \
--cc=james.clark@arm.com \
--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=peterz@infradead.org \
/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.