OSDN Git Service

findInitPid() has been implemented and it seems to work.
authorJohn Beppu <beppu@lbox.org>
Thu, 9 Dec 1999 22:10:18 +0000 (22:10 -0000)
committerJohn Beppu <beppu@lbox.org>
Thu, 9 Dec 1999 22:10:18 +0000 (22:10 -0000)
    reboot has been changed to take advantage of findInitPid();

init/reboot.c
internal.h
reboot.c
utility.c

index 53a3520..17ec9f8 100644 (file)
@@ -26,5 +26,6 @@
 extern int
 reboot_main(int argc, char ** argv)
 {
-       exit( kill(1, SIGUSR2));
+       /* don't assume init's pid == 1 */
+       exit( kill(findInitPid(), SIGUSR2));
 }
index 830d30e..de13bb2 100644 (file)
@@ -157,6 +157,7 @@ extern void write_mtab(char* blockDevice, char* directory,
 extern void erase_mtab(const char * name);
 extern int check_wildcard_match(const char* text, const char* pattern);
 extern long getNum (const char *cp);
+extern pid_t findInitPid();
 
 
 #if defined BB_MTAB
index 53a3520..17ec9f8 100644 (file)
--- a/reboot.c
+++ b/reboot.c
@@ -26,5 +26,6 @@
 extern int
 reboot_main(int argc, char ** argv)
 {
-       exit( kill(1, SIGUSR2));
+       /* don't assume init's pid == 1 */
+       exit( kill(findInitPid(), SIGUSR2));
 }
index de7a0fb..42ee00c 100644 (file)
--- a/utility.c
+++ b/utility.c
@@ -1068,14 +1068,39 @@ extern long getNum (const char *cp)
 }
 #endif
 
+#if 1
+/* findInitPid()
+ *  
+ *  This finds the pid of init (which is not always 1).
+ *  Currently, it's implemented by rummaging through the proc filesystem.
+ *
+ *  [return]
+ *  0      failure
+ *  pid            when init's pid is found.
+ */
+extern pid_t
+findInitPid()
+{
+    pid_t   init_pid;
+    char    filename[256];
+    char    buffer[256];
+
+    /* no need to opendir ;) */
+    for (init_pid = 1; init_pid < 65536; init_pid++) {
+       FILE    *status;
+
+       sprintf(filename, "/proc/%d/status", init_pid);
+       status = fopen(filename, "r");
+       if (!status) { continue; }
+       fgets(buffer, 256, status);
+       fclose(status);
+
+       if ( (strcmp(&buffer[6], "init\n") == 0)) {
+           return init_pid;
+       }
+    }
+    return 0;
+}
+#endif
 
 /* END CODE */
-
-
-
-
-
-
-
-
-