最近在给mongodb加个log rotate的脚本,偶然发现下面这行命令在sh脚本里面执行报错脚本里面有一行给mongod发信号的命令,具体如下kill -SIGUSR1 $(pidof mongod...)如果执行 sh xxx.sh会报错提示如下:mongo_log_backup_v1.sh: line 9: kill: SIGUSR1: invalid signal specification但是如果使用...下面是网上找的相关解释和说明:一般linux系统支持的shell有多种如果是用bash写的shell脚本,那么,执行的时候要在bash下。...SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1...SIGRTMAX-560) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX在sh中 查看kill -l (无SIGUSR1
这篇文章主要通过简单的例子说明一下Unix/Linux进程中如果捕捉和处理SIGTERM、SIGUSR1和SIGUSR2信号。...SIGTERM:进程终止信号,效果等同于*nix shell中不带-9的kill命令; SIGUSR1:保留给用户使用的信号; SIGUSR2:同SIGUSR1,保留给用户使用的信号。...1 信号的处理方式 对于SIGTERM、SIGUSR1和SIGUSR2这三种信号,如果在当前进程中不进行捕获或者忽略(sighold)的话,*nix系统内核会自动使进程退出然后回收进程资源。.../sigkill 27346 ##### 作用相当于直接通过Linux shell的kill命令: [root@typecodes signal]# kill 27346 sigterm进程(27346...由于进程对SIGUSR1和SIGUSR2等其它信号的处理方法和SIGTERM可以完全一样,这里就不再演示了(只需要把两个程序中的SIGTERM替换即可)。
在Linux服务端后台开发中,经常会用到信号处理函数:sigprocmask和sigsuspend。...sigprocmask_sigsuspend.c * @Describe A simple example for using sigprocmask and sigsuspend functions in linux...\n" ); sleep(3); } return 0; } 3 发送SIGUSR1和SIGUSR2信号 如下图所示,使用kill命令向进程(PID:7154)发送SIGUSR1...由于sigsuspend函数把信号SIGUSR1和SIGUSR2加入到信号掩码pendmask中,所以这两个信号的到来对当前进程没有任何影响。...这时,由于之前由于信号掩码pendmask被屏蔽的未决信号信号SIGUSR1和SIGUSR2由内核重新传递,所以进程会执行SIGUSR2信号的处理函数(SIGUSR1信号被信号集new_set所屏蔽,因此不会执行
在Linux系统下,这个日志文件为 /var/log/mongodb/mongodb.log。...rotates logs in response to the logRotate command, or when the mongod or mongos process receives a SIGUSR1...翻译过来就是,当你通过 --logpath参数指定了日志的位置以后,MongoDB会始终把日志写到这个文件中,除非你执行了 logRotate命令,或者MongoDB的进程收到了 SIGUSR1信号。...在Linux或者mac中执行命令: # 在Linux下用-auxps -aux | grep mongo # 在mac下用-efps -ef | grep mongo 从左数第二项就是MongoDB的PID...此时,执行命令: # kill -SIGUSR1 PIDkill -SIGUSR1 561 就可以实现rotate日志。
在Linux中,要发送一个信号相当容易。程序员需要知道两个信息:要发送哪个信号,将这个信号发送给哪个进程。可以用 man 7 signal 找到一个可以利用的信号的列表。.../n",timer-2); if(timer==4) kill(getppid(),SIGUSR1); //向父进程发送一个SIGUSR1信号.../n",SIGCHLD_num); } void when_sigusr1() { printf("系统接收到了用户自定义信号SIGUSR1。...系统接收到了用户自定义信号SIGUSR1。 距离SIGALRM信号到来还有1秒。 5秒钟时间已到,系统接收到了SIGALRM信号! 子进程还剩2秒退出,届时会产生SIGCHLD信号。...中国) http://www.linux-cn.com/html/linux/system/20070505/27605.shtml Linux 信号signal处理函数(CSDN) http://blog.csdn.net
在 Linux 系统中,所有的信号都使用一个整型数值来表示,可以打开文件 /usr/include/x86_64-linux-gnu/bits/signum.h(你的系统中可能位于其它的目录) 查看一下...在另一个终端中,使用kill指令来发送信号SIGUSR1或者 SIGUSR2。...执行发送信号SIGUSR1指令: $ kill -10 14788 此时,在应用程序的终端窗口中,就能看到下面的打印信息: 说明应用程序接收到了 SIGUSR1 这个信号!... #include #include // 新增的头文件 #include #include #include #include #include <linux/pid_namespace.h
通过 Linux 系统自带的服务 logrotate 进行切割 首先我们需要配置 MongoDB 参数 logRotate = reopen, logappend = true,然后通过 Linux 系统自带的...通过向进程发送 SIGUSR1 信号来切割日志 如果我们的进程 id 是19555,那么我们可以通过以下命令来切割日志的。只要我们执行了该命令,日志就会立即进行切割。...kill -SIGUSR1 19555 在Linux上安装MongoDB Community Edition 4.0 https://www.linuxidc.com/Linux/2019-03/
个人微信公众号:fensnote 简述 共享内存是Linux系统进程间通信常用的方式,通常用于数据量较大的情况,如果只是用于不同的进程间消息通知,那不如用消息队列或者socket。...", 'a')) == -1) { perror("ftok"); exit(-1); } signal(SIGUSR1, handler);...} peerpid = shmadd->pid; shmadd->pid = getpid(); kill(peerpid, SIGUSR1...shmadd->text, N, stdin); shmadd->text[strlen(shmadd->text)-1] = '\0'; kill(peerpid, SIGUSR1...", 'a')) == -1) { perror("ftok"); exit(-1); } signal(SIGUSR1, handler);
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1...可靠信号与不可靠信号 Linux信号机制基本上是从Unix系统中继承过来的。早期Unix系统中的信号机制比较简单和原始,信号值小于SIGRTMIN的信号都是不可靠信号。这就是"不可靠信号"的来源。...Linux在支持新版本的信号安装函数sigation()以及信号发送函数sigqueue()的同时,仍然支持早期的signal()信号安装函数,支持信号发送函数kill()。...目前linux中的signal()是通过sigation()函数实现的,因此,即使通过signal()安装的信号,在信号处理函数的结尾也不必再调用一次信号安装函数。...对于目前linux的两个信号安装函数:signal()及sigaction()来说,它们都不能把SIGRTMIN以前的信号变成可靠信号(都不支持排队,仍有可能丢失,仍然是不可靠信号),而且对SIGRTMIN
SIGINT, val); // 只可以发信号给某个进程,而不能是进程组 return 0; } 测试如下: 先运行recv程序: simba@ubuntu:~/Documents/code/linux_programming.../sigqueue_recv 再ps出recv进程的pid,然后运行send程序: simba@ubuntu:~/Documents/code/linux_programming/APUE/signal...); return 0; } 先是运行recv程序: simba@ubuntu:~/Documents/code/linux_programming/APUE/signal$ ..../sigrtime_recv2 接着ps出recv进程的pid,运行send程序: simba@ubuntu:~/Documents/code/linux_programming/APUE/signal.../sigrtime_send 4076 在send程序中连续各发送了SIGINT和SIGRTMIN信号3次,接着睡眠3s后使用kill函数发送SIGUSR1信号给recv进程,此时recv进程会输出如下
信号编号: 【源码基于 SIGINT,SIGTERM,SIGUSR1 信号,含义请自行查看 kill 命令手册,不在描述】 linux 支持 64 个,有一半为实时信号,一半为非时实信号,这些信号都有自己的编号和对应的整数值...每个信号的编号含义读者可以参阅 linux 相关手册【man 手册看看就知道了】 信号处理函数: 信号一般会绑定相应的功能,有的是默认动作如 SIGKILL,SIGTERM,SIGINT 操作默认操作就是干掉进程...文件描述权限掩码【权限屏蔽字】: umask () 你可以在 linux 运行这个命令,然后创建文件,并查看它的权限【如果你跑完啥也没有发现,说明你还是训练不够 ^_^】 <?...*******/ }else{ $this- workerPids[$pid] = $job; } } } function workerInstallSignal() { pcntl_signal(SIGUSR1...CLASS__,'workerHandleSignal'],false); } function workerHandleSignal($signal) { switch ($signal){ case SIGUSR1
--《linux系统编程》 ” 如上所述,信号可以实现进程间的通信。本章主要记录信号的使用方法。 概念 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。...main(int argc, char *argv[]) { int signo = 0; char mode[1] = {0}; fprintf(stdout, "1: SIGUSR1...void SignalHandler(int sig) { fprintf(stdout, "Receive signal: "); switch(sig) { case SIGUSR1...: fprintf(stdout, "SIGUSR1\n"); break; case SIG_TEST1: fprintf(stdout,...SIG_TEST1, SignalHandler); signal(SIG_DEFAULT, SignalHandler); while(1); return 0; } 参考 《linux
Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录(转) 文章转自:http://www.osyunwei.com/archives/8998.html 说明: 操作系统:CentOS...具体操作: 使用Mongodb数据库自带的命令来切割日志 ps -def | grep mongod kill -SIGUSR1 1、创建Mongodb数据库日志切割脚本...数据库存放目录 logfile=/home/data/mongodb/mongodb_log #Mongodb日志存放目录 days=7 #代表删除7天前的备份,即只保留最近7天的备份 /bin/kill -SIGUSR1...至此,Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录完成。
while (1) { sleep(1); } return 0; } 在代码中调用kill函数来产生信号——详见-kill()函数 Unix/Linux int kill...信号,如果此时再收到SIGUSR1,则会执行完后在进行SIGUSR1信号处理。..., 0);//处理SIGUSR1信号 while (1) { } return 0; } 以上详解: 先收到SIGINT信号,如果此时再收到SIGUSR1,则会执行完SIGINT的信号处理函数后再进行...SIGUSR1信号处理,因为SIGUSR1被加入到了响应SIGINT信号的信号搁置集中。...结果如下图所示: 先收到SIGUSR1信号,如果此时再收到SIGINT,则会先执行SIGINT的信号处理函数后再回来继续进行SIGUSR1信号处理函数的执行。
( Linux中所有的进程都是进程0的子进程。 pid=1的是init,内核完成之后启动的第一个进程,然后init根据/etc/inittab的内容再去启动其它进程。)...SIGUSR1: 用户自定义信号 os.killpg( p.pid,signal.SIGUSR1): 发送SIGUSR1信号到组进程p.pid 二、封装subprocess 函数 最近使用python...bin/env python3 # coding: utf-8 import os import time import signal import subprocess def execute_linux2...(cmd, timeout=10, skip=False): """ 执行linux命令,返回list :param cmd: linux命令 :param timeout
进程信号在 Linux 中被广泛应用于多种场景,例如进程间通信、异常处理、线程同步等。下面将详细介绍 Linux 中进程信号的相关内容。2....SIGUSR1 和 SIGUSR2:用户自定义信号。除了上述信号类型外,还有一些其他的信号类型,例如 SIGHUP、SIGCHLD、SIGPIPE、SIGALRM 等。3....调用用户定义的信号处理函数:例如 SIGUSR1 和 SIGUSR2 信号,用户自定义信号。...例如,一个进程可以向另一个进程发送 SIGUSR1 或 SIGUSR2 信号,接收进程可以在信号处理函数中读取共享内存或管道中的数据。...了解 Linux 进程信号的基本概念、信号类型、信号处理方式和信号传递机制对于 Linux 编程非常重要。
就好比研究Linux内核,如果一上来就从Linux 4.x/5.x内核版本开始研究,可以看到很多“历史遗留”代码。...这些代码就见证着Linux一步一步的发展历史,甚至有些人还会专门去研究 Linux 0.11 版本的内核源码,因为很多基本思想都是一样的。...文件内容如下: #include #include #include #include #include #include #include #include #include #include #include // 中断号
3.SIGUSR1 在linux下,可以使用kill –SIGUSR1(pid of mongod),对mongos及mongod都适用。...因为我们的当前的集群方式为:mongos+mongod(配置副本集)+mongod(分片),所以如果可以ps –aux|grep mongod可以得到数组,然后直接使用kill –SiGUSR1命令就可以了...编写完sh命令之后,无法识别-SIGUSR1。 选择第一种方式进入mongodb中,编写js脚本,然后sh命令调用这个js命令,指定一个linux的任务。...Linux的任务分为当前用户任务,系统用户。
log.Infof("SIGKILL") return case syscall.SIGUSR1: log.Infof("SIGUSR1...os.Exit(0) } Linux Signal及Golang中的信号处理 信号(Signal)是Linux, 类Unix和其它POSIX兼容的操作系统中用来进程间通讯的一种方式。...https://colobu.com/2015/10/09/Linux-Signals/ 信号类型 个平台的信号定义或许有些不同。下面列出了POSIX中定义的信号。...Linux 使用34-64信号用作实时系统中。 命令man 7 signal提供了官方的信号介绍。...13 Term 消息管道损坏(FIFO/Socket通信时,管道未打开而进行写操作) SIGALRM 14 Term 时钟定时信号 SIGTERM 15 Term 结束程序(可以被捕获、阻塞或忽略) SIGUSR1
这是因为 SIGUSR1 被当前操作系统定义成 30(请注意不同的操作系统这个映射表是可能不同的),这点可以通过 man signal 查看: No Name Default Action Description...SIGWINCH discard signal Window size change 29 SIGINFO discard signal status request from keyboard 30 SIGUSR1...其中,一个有用的命令是 strace: strace -p pid 比如,我自己写了一个测试脚本 t.py,使用 python 执行,然后调用 sleep,再给它发送一个 SIGUSR1 的消息,它打印方法栈并退出...ERESTARTNOHAND (To be restarted if no handler) --- SIGUSR1 {si_signo=SIGUSR1, si_code=SI_USER, si_pid...lsof lsof 可以打印某进程打开的文件,而 Linux 下面一切都是文件,因此查看打开的文件列表有时可以获取很多额外的信息。
领取专属 10元无门槛券
手把手带您无忧上云