mirror of
https://github.com/sheumann/hush.git
synced 2025-02-23 18:29:01 +00:00
findInitPid() has been implemented and it seems to work.
reboot has been changed to take advantage of findInitPid();
This commit is contained in:
parent
395b216a2e
commit
f95ca97d1b
@ -26,5 +26,6 @@
|
|||||||
extern int
|
extern int
|
||||||
reboot_main(int argc, char ** argv)
|
reboot_main(int argc, char ** argv)
|
||||||
{
|
{
|
||||||
exit( kill(1, SIGUSR2));
|
/* don't assume init's pid == 1 */
|
||||||
|
exit( kill(findInitPid(), SIGUSR2));
|
||||||
}
|
}
|
||||||
|
@ -157,6 +157,7 @@ extern void write_mtab(char* blockDevice, char* directory,
|
|||||||
extern void erase_mtab(const char * name);
|
extern void erase_mtab(const char * name);
|
||||||
extern int check_wildcard_match(const char* text, const char* pattern);
|
extern int check_wildcard_match(const char* text, const char* pattern);
|
||||||
extern long getNum (const char *cp);
|
extern long getNum (const char *cp);
|
||||||
|
extern pid_t findInitPid();
|
||||||
|
|
||||||
|
|
||||||
#if defined BB_MTAB
|
#if defined BB_MTAB
|
||||||
|
3
reboot.c
3
reboot.c
@ -26,5 +26,6 @@
|
|||||||
extern int
|
extern int
|
||||||
reboot_main(int argc, char ** argv)
|
reboot_main(int argc, char ** argv)
|
||||||
{
|
{
|
||||||
exit( kill(1, SIGUSR2));
|
/* don't assume init's pid == 1 */
|
||||||
|
exit( kill(findInitPid(), SIGUSR2));
|
||||||
}
|
}
|
||||||
|
43
utility.c
43
utility.c
@ -1068,14 +1068,39 @@ extern long getNum (const char *cp)
|
|||||||
}
|
}
|
||||||
#endif
|
#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 */
|
/* END CODE */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user