1 /* vi: set sw=4 ts=4: */
3 * pidof implementation for busybox
5 * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
7 * Licensed under the GPL version 2, see the file LICENSE in this tarball.
13 USE_FEATURE_PIDOF_SINGLE(OPTBIT_SINGLE
,)
14 USE_FEATURE_PIDOF_OMIT( OPTBIT_OMIT
,)
15 OPT_SINGLE
= USE_FEATURE_PIDOF_SINGLE((1<<OPTBIT_SINGLE
)) + 0,
16 OPT_OMIT
= USE_FEATURE_PIDOF_OMIT( (1<<OPTBIT_OMIT
)) + 0,
19 int pidof_main(int argc
, char **argv
) MAIN_EXTERNALLY_VISIBLE
;
20 int pidof_main(int argc UNUSED_PARAM
, char **argv
)
24 #if ENABLE_FEATURE_PIDOF_OMIT
25 llist_t
*omits
= NULL
; /* list of pids to omit */
26 opt_complementary
= "o::";
29 /* do unconditional option parsing */
30 opt
= getopt32(argv
, ""
31 USE_FEATURE_PIDOF_SINGLE ("s")
32 USE_FEATURE_PIDOF_OMIT("o:", &omits
));
34 #if ENABLE_FEATURE_PIDOF_OMIT
37 llist_t
*omits_p
= omits
;
39 /* are we asked to exclude the parent's process ID? */
40 if (strcmp(omits_p
->data
, "%PPID") == 0) {
41 omits_p
->data
= utoa((unsigned)getppid());
43 omits_p
= omits_p
->link
;
47 /* Looks like everything is set to go. */
53 /* reverse the pidlist like GNU pidof does. */
54 pidList
= pidlist_reverse(find_pid_by_name(*argv
));
55 for (pl
= pidList
; *pl
; pl
++) {
56 #if ENABLE_FEATURE_PIDOF_OMIT
58 llist_t
*omits_p
= omits
;
60 if (xatoul(omits_p
->data
) == (unsigned long)(*pl
)) {
63 omits_p
= omits_p
->link
;
67 printf(" %u" + first
, (unsigned)*pl
);
69 if (ENABLE_FEATURE_PIDOF_SINGLE
&& (opt
& OPT_SINGLE
))
71 #if ENABLE_FEATURE_PIDOF_OMIT
81 #if ENABLE_FEATURE_PIDOF_OMIT
82 if (ENABLE_FEATURE_CLEAN_UP
)
83 llist_free(omits
, NULL
);
85 return first
; /* 1 (failure) - no processes found */