我想在C++程序的开头显示一个PID,并发送一个等待信号,这样我就可以在另一个终端中运行gdb - PID
。然后按下gdb终端中的run
,程序应继续。
如果我使用
pid_t pid = getpid();
cout << "PID = " << pid << endl;
raise(SIGSTOP);
我在输出中看到了这一点
$ ./run
PID = 30261
[1]+ Stopped ./run
$
因此,程序进入后台并停止。另一方面,如果我使用SIGINT
,我会看到
$ ./run
PID = 8790
Caught signal: 2
$
我该怎么解决?
因此,程序进入后台并停止
是什么阻止您附加到已停止的进程?
现在,您可以连接到pid编号为30261的进程,并继续执行程序。另请参阅等待gdb附加的相关问题。
gdb ./run 30261
您不需要使用信号来暂停应用程序,只需等待您感兴趣的特定信号即可。
int main(){
std::cout << "PID = " << getpid() << std::endl;
int sig;
sigset_t signal_set;
sigemptyset(&signal_set);
sigaddset(&signal_set, SIGCONT);
sigwait( &signal_set, &sig );
std::cout << "continued" << std::endl;
}