int sys_kill(pid_t pid, int sig) { if(sig>=0 && sig<SIGNAL_MAX && _trans_number2index[sig] != _SIGUNDEF) { struct process *dest; printk(LOG_DEBUG, "signal: kill(%d, %d)\n", pid, sig); // depending pid value, this can be a gid or a pid if(pid > 0) { dest = process_from_pid(pid); if(dest != NULL) signal_raise(dest, sig); else return -EPERM; } else { // process group pid = pid==0 ? _proc_current->pgid : -pid; signal_pgid_raise(pid, sig); } } else { return -EINVAL; } return 0; }
void signal_pgid_raise(pid_t pgid, int sig) { struct process *dest; for_each_process(dest) { //printk(LOG_DEBUG, "pgid_raise: pid %d, pgid %d\n", dest->pid, dest->pgid); if (dest->pgid == pgid) signal_raise(dest, sig); } }
void Tray::trayiconActivated(QSystemTrayIcon::ActivationReason reason) { switch (reason) { //单击托盘图标 case QSystemTrayIcon::Trigger: break; case QSystemTrayIcon::DoubleClick: //双击托盘图标 emit signal_showNormal(); emit signal_raise(); break; default: break; } }