linux后台守护进程阻塞的方法

zhangqieos 2013-03-20 03:10:05
有没有谁知道如何阻塞Linux后台守护进程(比如cupsd),并在一段时间后解除阻塞状态,谢谢!
...全文
347 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
fdl19881 2013-03-27
  • 打赏
  • 举报
回复
引用 12 楼 zhangqieos 的回复:
你好,通过这种方式确实将后台的守护进程给在暂停了,但是恢复后并不能继续执行暂停前的任务啊! PS:我的需求是这样的,上层应用程序将打印任务下发到打印缓冲队列中,而后台打印守护进程(cupsd)从缓冲队列中获取打印数据区打印。我想在打印守护进程获取打印数据之前将其阻塞,即先让打印守护进程停下来,等我将打印缓冲队列中的文件做了分析之后,再恢复打印守护进程,让其去打印。 通过发信号的方式确实让打印守护进程停下来了,但是等我分析完成之后,恢复打印守护进程,并不能打印我之前的任务啊! 请问问题出在哪啊!谢谢
和cupsd的实现有关,
zhangqieos 2013-03-22
  • 打赏
  • 举报
回复
你好,通过这种方式确实将后台的守护进程给在暂停了,但是恢复后并不能继续执行暂停前的任务啊! PS:我的需求是这样的,上层应用程序将打印任务下发到打印缓冲队列中,而后台打印守护进程(cupsd)从缓冲队列中获取打印数据区打印。我想在打印守护进程获取打印数据之前将其阻塞,即先让打印守护进程停下来,等我将打印缓冲队列中的文件做了分析之后,再恢复打印守护进程,让其去打印。 通过发信号的方式确实让打印守护进程停下来了,但是等我分析完成之后,恢复打印守护进程,并不能打印我之前的任务啊! 请问问题出在哪啊!谢谢
fdl19881 2013-03-21
  • 打赏
  • 举报
回复
引用 10 楼 zhangqieos 的回复:
C/C++ code?123char cmd_stop[32] = {0}; sprintf(cmd_stop,"kill -SIGSTOP %d",cupsd_pid); system(cmd_stop); cupsd_pid是我通过pgrep cupsd获取到得
既然是C代码,那就直接使用C API,,,,, 你的问题应该是由于shell对命令的解释问题。 shell对字符串的解释问题一向有些杂。 #include <sys/types.h> #include <signal.h> int kill(pid_t pid, int sig); kill(cupsd_pid, SIGSTOP);
zhangqieos 2013-03-21
  • 打赏
  • 举报
回复
				char cmd_stop[32] = {0};
					sprintf(cmd_stop,"kill -SIGSTOP %d",cupsd_pid);
					system(cmd_stop);
cupsd_pid是我通过pgrep cupsd获取到得
fdl19881 2013-03-21
  • 打赏
  • 举报
回复
引用 8 楼 zhangqieos 的回复:
尝试着给cupsd进程发送了SIGSTOP信号(这个停止信号是在我的程序中发的),但执行结果是sh: line 0: kill: SIGSTOP: invalid signal specification 但单独执行kill -SIGSTOP pid却是可以的!不知道为什么,难道我获取的PID有问题!
C程序?? 这个错误是int kill(pid_t pid, int sig);中的sig错误了! 帖代码,有代码才有真相
zhangqieos 2013-03-21
  • 打赏
  • 举报
回复
尝试着给cupsd进程发送了SIGSTOP信号(这个停止信号是在我的程序中发的),但执行结果是sh: line 0: kill: SIGSTOP: invalid signal specification 但单独执行kill -SIGSTOP pid却是可以的!不知道为什么,难道我获取的PID有问题!
fdl19881 2013-03-20
  • 打赏
  • 举报
回复
引用 6 楼 zhangqieos 的回复:
守护进程不是自己实现的,系统本身就存在的(cupsd),就是想让这个守护进程在某个时间段阻塞!不知道有没有实现方法!
给此守护进程发送SIGSTOP信号即可! 若要其恢复,则发送SIGCONT信号 shell命令中用kill -SIGSTOP pid, kill -SIGCONT pid
zhangqieos 2013-03-20
  • 打赏
  • 举报
回复
守护进程不是自己实现的,系统本身就存在的(cupsd),就是想让这个守护进程在某个时间段阻塞!不知道有没有实现方法!
fdl19881 2013-03-20
  • 打赏
  • 举报
回复
引用 4 楼 zhangqieos 的回复:
要阻塞的是系统的后台守护进程,pthread_mutex_timedlock、pthread_cond_timedwait好像是对线程的操作啊!
我想请问你,这个守护进程是否你编写,,然后你现在想让其睡眼固定时间??? 如果是,上面的方法都可以. 单线程而已,所以也适用.
zhangqieos 2013-03-20
  • 打赏
  • 举报
回复
要阻塞的是系统的后台守护进程,pthread_mutex_timedlock、pthread_cond_timedwait好像是对线程的操作啊!
2399 2013-03-20
  • 打赏
  • 举报
回复
新增一个为空的文件,文件一直存在就守护。进程运行完毕,删除文件
fdl19881 2013-03-20
  • 打赏
  • 举报
回复
纯粹的定时睡眼可以用sleep,usleep ,,,, select/poll/epoll.... 除sleep外,别的精度都比较高. 如果是还带条件唤醒的话,就用mutex+cond,,,sem, pipe+select/poll/epoll等等都可以做到. pthread_mutex_timedlock pthread_cond_timedwait...
fdl19881 2013-03-20
  • 打赏
  • 举报
回复
定时睡眼? sleep.

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧