Use /proc/self/comm when argv[0] is not available

When libvmclient determins the name of the calling process, it used
argv[0]. However, it may not work if the caling process is an Android
app, in which case /proc/self/comm works.

Bug: 425014115
Test: atest MicrodroidTestApp:com.android.microdroid.test.MicrodroidTests#vm_virtmgrCrash
Flag: EXEMPT debug-only change
Change-Id: I4500e90e7ab697cf799b43394d163e34431192a0
diff --git a/libs/libvmclient/src/lib.rs b/libs/libvmclient/src/lib.rs
index 91dbe2e..f2feda3 100644
--- a/libs/libvmclient/src/lib.rs
+++ b/libs/libvmclient/src/lib.rs
@@ -145,14 +145,20 @@
         command.arg("--ready-fd").arg(format!("{}", ready_fd.as_raw_fd()));
         command.preserved_fds(vec![server_fd, ready_fd]);
 
-        // ps uses -o NAME by default, which shows the last path element of argv[0].
-        if let Some(arg0) = std::env::args().nth(0) {
-            let prog_name = match arg0.rfind('/') {
+        // Determine the name of this process in many ways. Try arg[0], COMM, and PID in that
+        // order.
+        let prog_name = if let Some(arg0) = std::env::args().nth(0) {
+            match arg0.rfind('/') {
                 Some(idx) => &arg0[idx + 1..],
                 None => &arg0,
-            };
-            command.arg0(format!("virtmgr_{prog_name}"));
-        }
+            }
+            .to_owned()
+        } else if let Ok(comm) = std::fs::read_to_string("/proc/self/comm") {
+            comm.trim().to_string()
+        } else {
+            std::process::id().to_string()
+        };
+        command.arg0(format!("virtmgr_{prog_name}"));
 
         let process = SharedChild::spawn(&mut command)?;
         let is_tty = isatty(std::io::stdout().as_raw_fd())?;
diff --git a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
index 4f781a2..7a334a6 100644
--- a/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
+++ b/tests/testapk/src/java/com/android/microdroid/test/MicrodroidTests.java
@@ -610,7 +610,7 @@
 
     @Test
     public void vm_virtmgrCrash() throws Exception {
-        testCrashInternal("test_vm_virtmgrCrash", "virtmgr");
+        testCrashInternal("test_vm_virtmgrCrash", "virtmgr_microdroid.test");
     }
 
     @Test