From a9aa35c252a3659ce860cde8e060561c853aa198 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Fri, 5 Jan 2024 14:03:27 -0800 Subject: [PATCH] Improve soong stuck ninja detection output Add -T to the pstree command so that it doesn't print the threads of the running processes, the thread information hasn't been useful for debugging any previous instances of stuck processes. Log that there are stuck processes to stdout with a pointer to look in soong.log. Test: manual Change-Id: I6459f2887a7e79591e8c451d06969f8709db3393 --- ui/build/ninja.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/build/ninja.go b/ui/build/ninja.go index b69e938f8..551b8ab41 100644 --- a/ui/build/ninja.go +++ b/ui/build/ninja.go @@ -271,11 +271,13 @@ func (c *ninjaStucknessChecker) check(ctx Context, config Config) { // The Ninja file hasn't been modified since the last time it was // checked, so Ninja could be stuck. Output some diagnostics. ctx.Verbosef("ninja may be stuck; last update to %v was %v. dumping process tree...", c.logPath, newModTime) + ctx.Printf("ninja may be stuck, check %v for list of running processes.", + filepath.Join(config.LogsDir(), config.logsPrefix+"soong.log")) // The "pstree" command doesn't exist on Mac, but "pstree" on Linux // gives more convenient output than "ps" So, we try pstree first, and // ps second - commandText := fmt.Sprintf("pstree -pal %v || ps -ef", os.Getpid()) + commandText := fmt.Sprintf("pstree -palT %v || ps -ef", os.Getpid()) cmd := Command(ctx, config, "dump process tree", "bash", "-c", commandText) output := cmd.CombinedOutputOrFatal()