diff --git a/Base/usr/share/man/man1/pgrep.md b/Base/usr/share/man/man1/pgrep.md index 5d4b224b0b..76d2e0d434 100644 --- a/Base/usr/share/man/man1/pgrep.md +++ b/Base/usr/share/man/man1/pgrep.md @@ -5,7 +5,7 @@ pgrep - look up processes based on name ## Synopsis ```sh -$ pgrep [--count] [-d delimiter] [--ignore-case] [--list-name] [--uid uid-list] [--invert-match] +$ pgrep [--count] [-d delimiter] [--ignore-case] [--list-name] [--uid uid-list] [--invert-match] [--exact] ``` ## Options @@ -15,7 +15,7 @@ $ pgrep [--count] [-d delimiter] [--ignore-case] [--list-name] [--uid uid-list] * `-i`, `--ignore-case`: Make matches case-insensitive * `-l`, `--list-name`: List the process name in addition to its pid * `-U uid-list`, `--uid uid-list`: Select only processes whose UID is in the given comma-separated list. Login name or numerical user ID may be used - +* `-x`, `--exact`: Select only processes whose names match the given pattern exactly * `-v`, `--invert-match`: Select non-matching lines ## Arguments diff --git a/Userland/Utilities/pgrep.cpp b/Userland/Utilities/pgrep.cpp index ce0ca0698a..9bf0212ab4 100644 --- a/Userland/Utilities/pgrep.cpp +++ b/Userland/Utilities/pgrep.cpp @@ -27,6 +27,7 @@ ErrorOr serenity_main(Main::Arguments args) bool case_insensitive = false; bool list_process_name = false; bool invert_match = false; + bool exact_match = false; HashTable uids_to_filter_by; StringView pattern; @@ -60,6 +61,7 @@ ErrorOr serenity_main(Main::Arguments args) }, }); args_parser.add_option(invert_match, "Select non-matching lines", "invert-match", 'v'); + args_parser.add_option(exact_match, "Select only processes whose names match the given pattern exactly", "exact", 'x'); args_parser.add_positional_argument(pattern, "Process name to search for", "process-name"); args_parser.parse(args); @@ -67,6 +69,12 @@ ErrorOr serenity_main(Main::Arguments args) if (case_insensitive) options |= PosixFlags::Insensitive; + StringBuilder exact_pattern_builder; + if (exact_match) { + exact_pattern_builder.appendff("^({})$", pattern); + pattern = exact_pattern_builder.string_view(); + } + Regex re(pattern, options); if (re.parser_result.error != regex::Error::NoError) { return 1;