本文整理汇总了C++中psignal函数的典型用法代码示例。如果您正苦于以下问题:C++ psignal函数的具体用法?C++ psignal怎么用?C++ psignal使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了psignal函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: waitfg
/*
* waitfg - block until FG job pid terminates or stops.
*/
void waitfg(pid_t pid)
{
int status;
/* wait for FG job to stop (WUNTRACED) or terminate */
if (waitpid(pid, &status, WUNTRACED) < 0)
unix_error("waitfg: waitpid error");
/* FG job has stopped. Change its state in jobs list */
if (WIFSTOPPED(status)) {
sprintf(sbuf, "Job %d stopped by signal", pid);
psignal(WSTOPSIG(status), sbuf);
updatejob(jobs, pid, ST);
}
/* FG job has terminated. Remove it from job list */
else {
/* check if job was terminated by an uncaught signal */
if (WIFSIGNALED(status)) {
sprintf(sbuf, "Job %d terminated by signal", pid);
psignal(WTERMSIG(status), sbuf);
}
deletejob(jobs, pid);
if (verbose)
printf("waitfg: job %d deleted\n", pid);
}
}
示例2: main
int main(int argc, char **argv)
{
sigset_t block, pending;
int sig, flag;
/* 设置信号的handler */
signal(MYSIGNAL, sig_handler);
/* 屏蔽此信号 */
sigemptyset(&block);
sigaddset(&block, MYSIGNAL);
printf("block signal\n");
sigprocmask(SIG_BLOCK, &block, NULL);
/* 发两次信号, 看信号将会被触发多少次 */
printf("---> send a signal --->\n");
kill(getpid(), MYSIGNAL);
printf("---> send a signal --->\n");
kill(getpid(), MYSIGNAL);
/* 检查当前的未决信号 */
flag = 0;
sigpending(&pending);
for (sig = 1; sig < NSIG; sig++) {
if (sigismember(&pending, sig)) {
flag = 1;
psignal(sig, "this signal is pending");
}
}
if (flag == 0) {
printf("no pending signal\n");
}
/* 解除此信号的屏蔽, 未决信号将被递送 */
printf("unblock signal\n");
sigprocmask(SIG_UNBLOCK, &block, NULL);
/* 再次检查未决信号 */
flag = 0;
sigpending(&pending);
for (sig = 1; sig < NSIG; sig++) {
if (sigismember(&pending, sig)) {
flag = 1;
psignal(sig, "a pending signal");
}
}
if (flag == 0) {
printf("no pending signal\n");
}
return 0;
}
示例3: sigchld_handler
void sigchld_handler(int sig) {
pid_t pid;
int status;
struct job *p;
if ((pid = waitpid(-1, &status, WUNTRACED)) > 0) {
if (WIFEXITED(status)) {
deletejob(pid);
if (pid == forepid) {
forepid = 0;
setpgid(pid, pid);
fprintf(stderr, "foreground job %d terminated normally with exit status=%d\n",
pid, WEXITSTATUS(status));
siglongjmp(env, 1);
}
else
fprintf(stderr, "job %d terminated normally with exit status=%d\n",
pid, WEXITSTATUS(status));
}
else if (WIFSTOPPED(status)) {
p = selectjob(pid);
p->state = 0;
if (pid == forepid) {
forepid = 0;
setpgid(pid, pid);
fprintf(stderr, "foreground job [%d] %d stopped by signal: Stopped\n",
p->jid, pid);
siglongjmp(env, 1);
}
else
fprintf(stderr, "job [%d] %d stopped by signal: Stopped\n",
p->jid, pid);
}
else if (WIFSIGNALED(status)) {
deletejob(pid);
if (pid == forepid) {
forepid = 0;
setpgid(pid, pid);
fprintf(stderr, "foreground job %d terminated by ", pid);
psignal(WTERMSIG(status), "signal");
siglongjmp(env, 1);
}
else
fprintf(stderr, "job %d terminated by ", pid);
psignal(WTERMSIG(status), "signal");
}
}
else if (errno != ECHILD)
fprintf(stderr, "waitpid error: %s\n", strerror(errno));
printf("handler reaped pid=%d, ready to return right now.\n", pid);
return;
}
示例4: fg_waitpid
void fg_waitpid(pid_t pid) {
int status;
pid_t r_pid;
struct job *p;
if ((r_pid = waitpid(pid, &status, 0)) > 0) {
printf("fg_waitpid in, forepid=%d, r_pid=%d\n", forepid, r_pid);
forepid = 0;
if (WIFEXITED(status)) {
deletejob(r_pid);
fprintf(stderr, "job %d terminated normally with exit status=%d\n",
r_pid, WEXITSTATUS(status));
}
else if (WIFSTOPPED(status)) {
p = selectjob(r_pid);
p->state = 0;
fprintf(stderr, "job [%d] %d stopped by signal: Stopped\n",
p->jid, r_pid);
}
else if (WIFSIGNALED(status)) {
deletejob(r_pid);
fprintf(stderr, "job %d terminated by ", r_pid);
psignal(WTERMSIG(status), "signal");
}
}
else if (errno != ECHILD)
fprintf(stderr, "waitpid error: %s\n",
strerror(errno));
printf("foreground reaped pid=%d, ready to return\n", r_pid);
return;
}
示例5: MySAR_signal_handler
void MySAR_signal_handler(int signal)
{
psignal(signal, "FATAL: MySAR Received Signal: ");
if (signal==SIGINT || signal==SIGTERM)
{
// rollback last operation
MySAR_db_rollback();
MySAR_free_mysql_statements();
if (!config->logfile.compressed)
{
// write last file position, prevent duplicationg records
MySAR_update_config(record.stamp, "lastTimestamp");
MySAR_update_config_long(ftell(input), "lastLogOffset");
}
// close db
MySAR_db_shutdown();
// dont forget to remove the lock...
MySAR_unlock_host();
exit(EXIT_FAILURE);
}
}
示例6: scheduler_signal_handler
static int scheduler_signal_handler(int sig){
/*quit listening upon signal and do clean up.*/
psignal(sig, "scheduler");
if(sig!=15) print_backtrace();
quit_listen=1;
return 1;
}
示例7: proc_apply_resource_actions
int
proc_apply_resource_actions(void * bsdinfo, __unused int type, int action)
{
proc_t p = (proc_t)bsdinfo;
switch(action) {
case PROC_POLICY_RSRCACT_THROTTLE:
/* no need to do anything */
break;
case PROC_POLICY_RSRCACT_SUSPEND:
task_suspend(p->task);
break;
case PROC_POLICY_RSRCACT_TERMINATE:
psignal(p, SIGKILL);
break;
case PROC_POLICY_RSRCACT_NOTIFY_KQ:
/* not implemented */
break;
case PROC_POLICY_RSRCACT_NOTIFY_EXC:
panic("shouldn't be applying exception notification to process!");
break;
}
return(0);
}
示例8: power_intr
int
power_intr(void *arg)
{
extern int kbd_reset;
int status;
status = (int8_t)_reg_read_1(LANDISK_BTNSTAT);
if (status == -1) {
return (0);
}
status = ~status;
if (status & BTN_POWER_BIT) {
#ifdef DEBUG
printf("%s switched\n", sc->sc_dev.dv_xname);
Debugger();
#endif
_reg_write_1(LANDISK_PWRSW_INTCLR, 1);
if (kbd_reset == 1) {
kbd_reset = 0;
psignal(initproc, SIGUSR1);
}
return (1);
}
return (0);
}
示例9: pledge_fail
int
pledge_fail(struct proc *p, int error, uint64_t code)
{
char *codes = "";
int i;
struct sigaction sa;
/* Print first matching pledge */
for (i = 0; code && pledgenames[i].bits != 0; i++)
if (pledgenames[i].bits & code) {
codes = pledgenames[i].name;
break;
}
printf("%s(%d): syscall %d \"%s\"\n", p->p_comm, p->p_pid,
p->p_pledge_syscall, codes);
#ifdef KTRACE
if (KTRPOINT(p, KTR_PLEDGE))
ktrpledge(p, error, code, p->p_pledge_syscall);
#endif
/* Send uncatchable SIGABRT for coredump */
memset(&sa, 0, sizeof sa);
sa.sa_handler = SIG_DFL;
setsigvec(p, SIGABRT, &sa);
psignal(p, SIGABRT);
p->p_p->ps_pledge = 0; /* Disable all PLEDGE_ flags */
return (error);
}
示例10: sigchld_handler
void sigchld_handler(int sig) {
pid_t pid;
int status;
struct job *p;
if ((pid = waitpid(-1, &status, WUNTRACED)) > 0) {
if (pid == forepid)
forepid = 0;
if (WIFEXITED(status))
deletejob(pid);
else if (WIFSTOPPED(status)) {
p = selectjob(pid);
p->state = 0;
fprintf(stderr, "job [%d] %d stopped by signal: Stopped\n",
p->jid, pid);
}
else if (WIFSIGNALED(status)) {
deletejob(pid);
fprintf(stderr, "job %d terminated by ", pid);
psignal(WTERMSIG(status), "signal");
}
}
else if (errno != ECHILD)
fprintf(stderr, "\nwaitpid error: %s\n", strerror(errno));
return;
}
示例11: pipeSigHandler
void pipeSigHandler( int signal ) {
#ifdef psignal
psignal( signal, "Signal Received : ");
#else
cout << "got pipe signal:" << signal << endl;
#endif
}
示例12: signal_handler
static void signal_handler(int sig)
{
#if defined(SIGPIPE)
if (sig == (int) SIGPIPE) {
psignal(sig, "Csound ignoring SIGPIPE");
return;
}
#endif
psignal(sig, "\ncsound command");
if ((sig == (int) SIGINT || sig == (int) SIGTERM)) {
if(_csound) csoundStop(_csound);
_result = -1;
return;
}
exit(1);
}
示例13: psignal_cmd
static TACommandVerdict psignal_cmd(TAThread thread,TAInputStream stream)
{
int sig = readInt ( & stream );
char * s = readString( & stream );
char * fileForStderr = readString( & stream );
FILE * stderrAsFile;
FILE * oldStderr;
// psignal( sig, s );
stderrAsFile = fopen( fileForStderr, "w" );
assertion( stderrAsFile != NULL, "psignal_cmd : stderrAsFile is NULL\n" );
oldStderr = stderr;
stderr = stderrAsFile;
// ta_debug_printf( "psignal_cmd : sig is %d\n" , sig ); fflush( stdout );
// ta_debug_printf( "psignal_cmd : s is \"%s\"\n", s ); fflush( stdout );
// ta_debug_printf( "psignal_cmd : fileForStderr is \"%s\"\n", fileForStderr ); fflush( stdout );
START_TARGET_OPERATION( thread );
// ta_debug_printf( "psignal_cmd : before psignal\n" ); fflush( stdout );
psignal( sig, s );
// ta_debug_printf( "psignal_cmd : after psignal\n" ); fflush( stdout );
END_TARGET_OPERATION( thread );
stderr = oldStderr;
// ta_debug_printf( "psignal_cmd : 1\n" ); fflush( stdout );
fclose( stderrAsFile );
// ta_debug_printf( "psignal_cmd : 2\n" ); fflush( stdout );
writeString( thread, "Ok" );
// ta_debug_printf( "psignal_cmd : 3\n" ); fflush( stdout );
sendResponse( thread );
// ta_debug_printf( "psignal_cmd : return\n" ); fflush( stdout );
return taDefaultVerdict;
}
示例14: main
int main(){
char *cmd = (char *)"/opt/vpnserver execsvc";
sigset_t mask;
int sig;
if(!(fp = (FILE *)popen(cmd, "re"))){
printf("popen failed\n");
exit(-1);
}else{
signal(SIGINT, quit);
signal(SIGTERM, quit);
sigfillset(&mask);
sigwait(&mask, &sig);
psignal(sig, "");
printf("Caught signal, closing\n");
pclose((FILE *)fp);
}
}
示例15: Mono_Posix_Syscall_psignal
int
Mono_Posix_Syscall_psignal (int sig, const char* s)
{
errno = 0;
psignal (sig, s);
return errno == 0 ? 0 : -1;
}