aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2025-01-04 02:30:14 +0100
committerdec05eba <dec05eba@protonmail.com>2025-01-04 02:30:14 +0100
commitf4dc07729938b53f94cc7410b2f1c6f5741636fb (patch)
tree0f42065d83a993f825a475015932ecdd497d8304
parent36c7bbfda38d93c01b05d453276295ead289ea0e (diff)
pidof ignore self
-rw-r--r--include/Process.hpp2
-rw-r--r--src/Process.cpp9
-rw-r--r--src/main.cpp2
3 files changed, 8 insertions, 5 deletions
diff --git a/include/Process.hpp b/include/Process.hpp
index 9662126..072ef58 100644
--- a/include/Process.hpp
+++ b/include/Process.hpp
@@ -21,5 +21,5 @@ namespace gsr {
// This works the same as |exec_program_get_stdout|, except on flatpak where this runs the program on the
// host machine with flatpak-spawn --host
int exec_program_on_host_get_stdout(const char **args, std::string &result);
- pid_t pidof(const char *process_name);
+ pid_t pidof(const char *process_name, pid_t ignore_pid);
} \ No newline at end of file
diff --git a/src/Process.cpp b/src/Process.cpp
index c5692f5..c5fcf0f 100644
--- a/src/Process.cpp
+++ b/src/Process.cpp
@@ -206,7 +206,7 @@ namespace gsr {
return false;
}
- pid_t pidof(const char *process_name) {
+ pid_t pidof(const char *process_name, pid_t ignore_pid) {
pid_t result = -1;
DIR *dir = opendir("/proc");
if(!dir)
@@ -222,8 +222,11 @@ namespace gsr {
snprintf(cmdline_filepath, sizeof(cmdline_filepath), "/proc/%s/cmdline", entry->d_name);
if(read_cmdline_arg0(cmdline_filepath, arg0, sizeof(arg0)) && strcmp(process_name, arg0) == 0) {
- result = atoi(entry->d_name);
- break;
+ const pid_t pid = atoi(entry->d_name);
+ if(pid != ignore_pid) {
+ result = pid;
+ break;
+ }
}
}
diff --git a/src/main.cpp b/src/main.cpp
index 1c16e6f..3cccde2 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -231,7 +231,7 @@ int main(int argc, char **argv) {
// that uses pid sandboxing. Replace this with a better method once we no longer rely on linux global hotkeys on some platform.
// TODO: This method doesn't work when disabling hotkeys and the method below with pidof gsr-ui doesn't work in flatpak.
// What do? creating a pid file doesn't work in flatpak either.
- if(is_gsr_ui_virtual_keyboard_running() || gsr::pidof("gsr-ui") != -1) {
+ if(is_gsr_ui_virtual_keyboard_running() || gsr::pidof("gsr-ui", getpid()) != -1) {
gsr::Rpc rpc;
if(rpc.open("gsr-ui") && rpc.write("show_ui\n", 8)) {
fprintf(stderr, "Error: another instance of gsr-ui is already running, opening that one instead\n");