static int dwmblockssig; pid_t dwmblockspid = 0; int getdwmblockspid() { char buf[16]; FILE *fp = popen("pidof -s dwmblocks", "r"); if (fgets(buf, sizeof(buf), fp)); pid_t pid = strtoul(buf, NULL, 10); pclose(fp); dwmblockspid = pid; return pid != 0 ? 0 : -1; } void sigdwmblocks(const Arg *arg) { union sigval sv; sv.sival_int = (dwmblockssig << 8) | arg->i; if (!dwmblockspid) if (getdwmblockspid() == -1) return; if (sigqueue(dwmblockspid, SIGUSR1, sv) == -1) { if (errno == ESRCH) { if (!getdwmblockspid()) sigqueue(dwmblockspid, SIGUSR1, sv); } } }