gpt4 book ai didi

c++ - 如何输出到当前可见的终端

转载 作者:太空狗 更新时间:2023-10-29 12:15:01 30 4
gpt4 key购买 nike

我想输出一些文本作为对信号 SIGUSR1 的响应

即用户发送 kill -USR1 <pid>到在后台或在另一个终端中启动的进程。

我想在 kill 的终端得到一些输出被调用。

我怎样才能做到这一点?

最佳答案

@BoBTFish 的评论有效。一个可能的伪 C++ 实现:

// somewhere in code:
std::memset(&sa, 0, sizeof(struct sigaction));
sa.sa_sigaction = sh_dump;
sa.sa_flags = static_cast<int>(SA_SIGINFO); // <- important, else you'll get an invalid siginfo_t pointer
sigaction(SIGUSR1, &sa, NULL);

void sh_dump(int, siginfo_t *info, void *) {

if(info) {

// do some locking of your choice

char *p = NULL;
char sp[PATH_MAX] = "";

std::snprintf(sp, PATH_MAX, "/proc/%d/stat", info->si_pid);

int tty_nr = 0;
FILE *spf;

if((spf = std::fopen(sp, "r"))) {

int iDummy;
char cDummy, *sDummy;

// proc(5)
if(std::fscanf(spf, "%d %ms %c %d %d %d %d", &iDummy, &sDummy, &cDummy, &iDummy, &iDummy, &iDummy, &tty_nr)) {}

free(sDummy);
std::fclose(spf);
}

// see http://goo.gl/L0pGK1 for an implementation
if(!(p = ttynameCheckDir(static_cast<dev_t>(tty_nr), "/dev/pts"))) {
p = ttynameCheckDir(static_cast<dev_t>(tty_nr), "/dev");
}

std::ofstream out(p ? p : "/dev/null");

free(p);

if(out.is_open()) out << "HELLO" << std::endl;

// do some unlocking of your choice
}
}

打印 HELLO在终端上调用 kill -USR1 <pid>

编辑:使用/proc/#/stat (仅限 Linux)

关于c++ - 如何输出到当前可见的终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28692420/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com