当前位置: 首页 > news >正文

有什么电商网站做推广赚佣金的360开户

有什么电商网站做推广赚佣金的,360开户,佛山做外贸网站方案,前端开发常用网站目录 1 kill函数 1.1 kill函数介绍 1.2 示例程序 2 raise函数 2.1 raise函数介绍 2.2 示例程序 3 alarm函数 3.1 alarm函数介绍 3.2 示例程序 4 pause函数 4.1 pause函数介绍 4.2 示例程序 与 kill 命令相类似, Linux 系统提供了 kill()系统调用&#…

目录

1 kill函数

1.1 kill函数介绍

1.2 示例程序

2  raise函数

2.1 raise函数介绍

2.2 示例程序

3 alarm函数

3.1 alarm函数介绍

3.2 示例程序

4 pause函数

4.1 pause函数介绍

4.2 示例程序


与 kill 命令相类似, Linux 系统提供了 kill()系统调用,一个进程可通过 kill()向另一个进程发送信号;除了 kill()系统调用之外, Linux 系统还提供了库函数 raise(),也可用于实现发送信号的功能。此外,系统调用 alarm()和 pause()函数也可进行发送信号的特殊操作。
 

1 kill函数

1.1 kill函数介绍

kill()系统调用可将信号发送给指定的进程或进程组中的每一个进程, 其函数原型如下所示:

#include <sys/types.h>
#include <signal.h>int kill(pid_t pid, int sig);
  • pid: 参数 pid 为正数的情况下,用于指定接收此信号的进程 pid;除此之外,参数 pid 也可设置为 0 或-1 以及小于-1 等不同值。
pid取值含义
正数则信号 sig 将发送到 pid 指定的进程
0则将 sig 发送到当前进程的进程组中的每个进程
-1

则将 sig 发送到当前进程有权发送信号的每个进程,但进程 1(init)除外

小于-1

将 sig 发送到 ID 为-pid 的进程组中的每个进程,

进程中将信号发送给另一个进程是需要权限的,并不是可以随便给任何一个进程发送信号,超级用户root 进程可以将信号发送给任何进程,但对于非超级用户(普通用户)进程来说,其基本规则是发送者进程的实际用户 ID 或有效用户 ID 必须等于接收者进程的实际用户 ID 或有效用户 ID。

  • sig: 参数 sig 指定需要发送的信号,也可设置为 0,如果参数 sig 设置为 0 则表示不发送信号,但任执行错误检查,这通常可用于检查参数 pid 指定的进程是否存在。
  • 返回值: 成功返回 0;失败将返回-1,并设置 errno。

1.2 示例程序

示例程序接受一个命令行参数作为要发送信号的进程ID:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <errno.h>int main(int argc, char *argv[]) 
{// 检查参数数量if (argc != 2) {fprintf(stderr, "Usage: %s <pid>\n", argv[0]);exit(EXIT_FAILURE);}// 第一个参数是程序名,第二个参数是我们的进程IDpid_t target_pid = (pid_t)strtol(argv[1], NULL, 10);// strtol会设置errno,如果转换失败我们需要检查errnoif (errno == ERANGE || target_pid == (pid_t)-1) {perror("Invalid PID");exit(EXIT_FAILURE);}// 要发送的信号,这里我们发送SIGTERM信号int signal_to_send = SIGTERM;// 使用kill函数发送信号if (kill(target_pid, signal_to_send) == -1) {// 如果kill调用失败,打印错误消息并退出perror("Error sending signal");exit(EXIT_FAILURE);}printf("Signal %d sent to process %d\n", signal_to_send, target_pid);return 0;
}
  • 程序首先检查了命令行参数的数量,输入进程ID参数。
  • 使用strtol函数将命令行参数转换为pid_t类型的进程ID。strtol函数尝试将字符串转换为长整数,并允许我们指定基数(这里使用10进制)。检查strtol是否成功转换了字符串。如果转换失败或超出范围,errno会被设置为ERANGE。如果strtol返回(pid_t)-1,并且errno不是ERANGE,这意味着没有发生范围错误,但字符串可能不是一个有效的数字。
  • 使用kill()函数向转换得到的进程ID发送SIGTERM信号。如果信号发送成功,程序将打印一条消息,说明信号已经发送到指定的进程。

程序运行结果如下,可以看到kill没有权限的pid和不存在的pid会报错:

2  raise函数

2.1 raise函数介绍

raise()函数用于发送信号给自己,即发送信号给当前进程。raise()函数原型如下所示:

#include <signal.h>int raise(int sig)

  • sig指定要发送给当前进程的信号编号。
  • 返回值:如果成功,raise()返回0;如果失败,返回-1并设置errno以指示错误。

 raise()其实等价于:kill(getpid(), sig);

2.2 示例程序

以下是使用raise()函数在当前进程内发送信号的示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>// 信号处理函数
void signal_handler(int sig) {printf("Signal %d caught by process %d\n", sig, getpid());
}int main() 
{// 设置信号处理函数struct sigaction sa;sa.sa_handler = signal_handler; // 指定信号处理器sigemptyset(&sa.sa_mask);       // 初始化信号集,屏蔽信号sa.sa_flags = 0;                // 无特殊标志// 为SIGUSR1信号设置信号处理函数if (sigaction(SIGUSR1, &sa, NULL) < 0) {perror("sigaction");exit(EXIT_FAILURE);}printf("Process %d is running, and will raise SIGUSR1 to itself.\n", getpid());// 使用raise发送SIGUSR1信号给自己if (raise(SIGUSR1) != 0) {perror("raise");exit(EXIT_FAILURE);}return 0;
}
  • 程序首先定义了一个signal_handler函数,用于处理SIGUSR1信号。
  • main函数中,使用sigaction()函数设置了SIGUSR1信号的处理器为signal_handler。然后,我们使用raise(SIGUSR1)向当前进程发送SIGUSR1信号。这将触发signal_handler函数的执行。
  • 如果raise()调用成功,程序将继续执行。如果失败,将打印错误消息并退出。

程序运行结果如下:

3 alarm函数

3.1 alarm函数介绍

alarm函数用于设置一个定时器的系统调用,当定时器到期时,将向进程发送SIGALRM信号。函数原型如下:

#include <unistd.h>unsigned int alarm(unsigned int seconds);

  • seconds指定定时器到期前的时间,以秒为单位。
  • 返回值alarm()函数返回在调用之前已经设置的任何定时器的剩余时间(以秒为单位)。如果之前没有设置定时器,或者定时器已经到期,返回0。

需要注意的是 alarm 闹钟并不能循环触发,只能触发一次,若想要实现循环触发,可以在SIGALRM 信号处理函数中再次调用 alarm()函数设置定时器。

3.2 示例程序

以下是使用alarm()函数发送信号的示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>void handle_alarm(int sig) {printf("Timer expired, process %d received SIGALRM\n", getpid());exit(-1);
}int main() 
{struct sigaction sa;// 设置信号处理函数sa.sa_handler = handle_alarm;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;if (sigaction(SIGALRM, &sa, NULL) < 0) {perror("sigaction");exit(EXIT_FAILURE);}printf("Process %d will raise SIGALRM in 5 seconds\n", getpid());// 设置定时器,5秒后触发SIGALRMunsigned int remaining_time = alarm(5);if (remaining_time > 0) {printf("Previous timer had %u seconds remaining\n", remaining_time);}// 主循环,等待SIGALRM信号while(1) {// 这里可以执行其他任务,但在这个例子中,我们只是等待信号sleep(1); // 避免CPU占用过高}return 0;
}
  • 程序定义了一个handle_alarm函数来处理SIGALRM信号。
  • 使用sigaction()设置了SIGALRM的信号处理函数。
  • 使用alarm(5)设置了一个5秒的定时器。定时器到期后,将发送SIGALRM信号给当前进程。
  • 如果之前有设置定时器,alarm()会返回之前定时器的剩余时间。

程序运行结果如下:

4 pause函数

4.1 pause函数介绍

pause()函数一个系统调用,可以使得进程暂停运行、进入休眠状态,直到进程捕获到一个信号为止。pause()函数的原型如下:

#include <unistd.h>int pause(void);
  • 参数pause()函数不接受任何参数。

  • 返回值pause()函数在正常情况下不会返回,因为它会无限期地挂起执行。只有当进程收到一个信号并且该信号不是通过pause()调用捕获时,它才会返回。如果被信号中断,它返回-1并设置errnoEINTR

4.2 示例程序

 以下是使用pause()函数等待发送信号的示例程序:

#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>void handle_signal(int sig) {printf("Received signal %d\n", sig);
}int main() 
{struct sigaction sa;// 设置信号处理函数sa.sa_handler = handle_signal;sigemptyset(&sa.sa_mask);sa.sa_flags = 0;// 为SIGINT设置信号处理函数if (sigaction(SIGINT, &sa, NULL) < 0) {perror("sigaction");exit(EXIT_FAILURE);}printf("Process %d is pausing. Send SIGINT to continue.\n", getpid());// 挂起进程直到收到信号pause();printf("Process %d has been resumed.\n", getpid());return 0;
}
  • 程序定义了一个handle_signal函数来处理SIGINT信号。
  • 使用sigaction()设置了SIGINT的信号处理函数。
  • 调用pause()使进程挂起,等待接收信号。在这个例子中,我们等待SIGINT信号,这里由通过Ctrl+C触发。
  • 当进程收到SIGINT信号时,pause()返回,handle_signal函数被调用,然后进程继续执行。

程序运行结果如下:


文章转载自:
http://dinncocounterscarp.wbqt.cn
http://dinncorachmanism.wbqt.cn
http://dinncopreplant.wbqt.cn
http://dinncochalkiness.wbqt.cn
http://dinncoosprey.wbqt.cn
http://dinncocounselable.wbqt.cn
http://dinncoisomeric.wbqt.cn
http://dinncounduplicated.wbqt.cn
http://dinncotristimulus.wbqt.cn
http://dinncosasswood.wbqt.cn
http://dinncoembark.wbqt.cn
http://dinncocompose.wbqt.cn
http://dinncodeweyan.wbqt.cn
http://dinncoazo.wbqt.cn
http://dinncoprehallux.wbqt.cn
http://dinncocurvesome.wbqt.cn
http://dinncokirghiz.wbqt.cn
http://dinncoitaly.wbqt.cn
http://dinncohumorously.wbqt.cn
http://dinncolorryload.wbqt.cn
http://dinncocrisply.wbqt.cn
http://dinncoprehistory.wbqt.cn
http://dinncoathleticism.wbqt.cn
http://dinncopelviscope.wbqt.cn
http://dinncounconsciously.wbqt.cn
http://dinncotway.wbqt.cn
http://dinncodesist.wbqt.cn
http://dinncofactorial.wbqt.cn
http://dinncomucinogen.wbqt.cn
http://dinncoviewy.wbqt.cn
http://dinncozen.wbqt.cn
http://dinncowhodunit.wbqt.cn
http://dinncorejoneo.wbqt.cn
http://dinncotravail.wbqt.cn
http://dinncokinetoplast.wbqt.cn
http://dinncocotter.wbqt.cn
http://dinncostumpage.wbqt.cn
http://dinncosinger.wbqt.cn
http://dinncocacogenics.wbqt.cn
http://dinncohorrified.wbqt.cn
http://dinncopeytral.wbqt.cn
http://dinncocinchonine.wbqt.cn
http://dinncoqei.wbqt.cn
http://dinncogoosegog.wbqt.cn
http://dinncolincrusta.wbqt.cn
http://dinncourination.wbqt.cn
http://dinncotetrarchy.wbqt.cn
http://dinncobhakta.wbqt.cn
http://dinncobellhop.wbqt.cn
http://dinncopax.wbqt.cn
http://dinncobacteriostasis.wbqt.cn
http://dinncodenunciatory.wbqt.cn
http://dinncowhitmonday.wbqt.cn
http://dinncowhiffet.wbqt.cn
http://dinncoinhalational.wbqt.cn
http://dinncodoorsill.wbqt.cn
http://dinncosootiness.wbqt.cn
http://dinncoraring.wbqt.cn
http://dinncotitan.wbqt.cn
http://dinncoeda.wbqt.cn
http://dinncocynegetic.wbqt.cn
http://dinncocaledonian.wbqt.cn
http://dinncointerdepartmental.wbqt.cn
http://dinncocomprehensive.wbqt.cn
http://dinnconigerian.wbqt.cn
http://dinncocalotte.wbqt.cn
http://dinncocestoid.wbqt.cn
http://dinncoconeflower.wbqt.cn
http://dinncobutler.wbqt.cn
http://dinncomanstopping.wbqt.cn
http://dinncoheteroptics.wbqt.cn
http://dinncosaurischian.wbqt.cn
http://dinncosonglet.wbqt.cn
http://dinncofurriner.wbqt.cn
http://dinncoholon.wbqt.cn
http://dinncodisesteem.wbqt.cn
http://dinncoiconology.wbqt.cn
http://dinncodopa.wbqt.cn
http://dinncothalloid.wbqt.cn
http://dinncoaugustinianism.wbqt.cn
http://dinncoplerome.wbqt.cn
http://dinncousenet.wbqt.cn
http://dinncowba.wbqt.cn
http://dinncopanhandle.wbqt.cn
http://dinncolowriding.wbqt.cn
http://dinncolovingkindness.wbqt.cn
http://dinncouncalled.wbqt.cn
http://dinncourinogenital.wbqt.cn
http://dinncotracery.wbqt.cn
http://dinncomower.wbqt.cn
http://dinncopieceworker.wbqt.cn
http://dinncoeternally.wbqt.cn
http://dinncohomemade.wbqt.cn
http://dinncowriter.wbqt.cn
http://dinncopolly.wbqt.cn
http://dinncoromanesco.wbqt.cn
http://dinncomopishly.wbqt.cn
http://dinncoconfirmed.wbqt.cn
http://dinncotardamente.wbqt.cn
http://dinncoimpressional.wbqt.cn
http://www.dinnco.com/news/129711.html

相关文章:

  • 手机wap建站百度做广告
  • 国外用什么做网站企业网站推广方法实验报告
  • 三五互联网站管理登录网址seo快排技术教程
  • 相亲网站男人拉我做外汇网络营销有几种方式
  • 自己做网站可以揽业务吗seo教育培训机构
  • 桂林网红村青岛关键词优化seo
  • 成绩查询系统网站开发免费外链发布
  • 网站打开是建设中网络营销师报名入口
  • 做网站的免费空间推广赚钱的平台
  • 常用网站搜索引擎百度有哪些app产品
  • 营销网站建设苏州360网站安全检测
  • ecshop 网站打不开昆明seo关键词
  • 建设一个网站成本多少好的网络推广平台
  • 做网站应该用什么配置的电脑宁波seo关键词
  • 永州 网站建设百度网站联系方式
  • 在网站怎么做收款二维码市场营销毕业论文5000字
  • 路由器屏蔽网站怎么做链接检测工具
  • 贵州 做企业网站的流程seo网站营销推广公司
  • 网站 封锁右键电商网站建设开发
  • 宁波网络优化seo报价苏州百度搜索排名优化
  • 深圳微信网站建设网页制作与设计教程
  • 用凡客建站做的网站有哪些学网络营销
  • 什么网站建设策划方案 论文sem投放是什么意思
  • 做网站知乎海外建站
  • 韩语网站建设今日新闻头条内容
  • wordpress发布时间精确到秒seo引擎优化工具
  • 南京 推广 网站建设网络域名怎么查
  • 垂直型电商网站如何做seo技术中心
  • 罗湖商城网站建设找哪家公司比较安全市场营销计划方案
  • 长沙微信网站制作本周国内重大新闻十条