LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1030|回复: 7

linux 下用c如何控制进程调度

[复制链接]
发表于 2006-6-15 08:21:13 | 显示全部楼层 |阅读模式
一个软件正在运行,我想在任意时刻中止软件运行,并把中止之前测试的结果显示出来!
不知道如何实现?请各位大虾赐教!
发表于 2006-6-15 08:29:12 | 显示全部楼层
我没写过这样的程序
不过给同学提过这样一个思路:
可以fork一个子进程,让子进程来负责显示结果,
然后在父进程退出前wait,让子进程先退出。

这样应该就可以了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-6-15 08:55:49 | 显示全部楼层
感谢楼上朋友的思路~

问题:如何中止一个效长的循环处理过程,只是中止不是强行关闭程序 。

具体内容:一个比效大的循环处理过程,可能执行要很长时间,如何才能在执行过程中中止它,点继续时又能按照前次的终止点继续。

解决方案:
下面是转载(编写软件:VB6。0)

引用程序中的一段:
If bFlag = False Then
bFlag = True
Else
Index = i
bFlag = False
End If
问题:我对bFlag的含义不是很了解,不知道那位大虾可以说明下!  

weiweiplay(虚幻) 于 2005-10-19 15:50:18

Option Explicit

Private bFlag As Boolean
Private Index As Long

Private Sub Command1_Click()
Static i As Long

If bFlag = False Then
bFlag = True
Else
Index = i
bFlag = False
End If

If bFlag Then
For i = Index To 100000
Caption = i
If bFlag = False Then Exit For
DoEvents
Next i
End If
End Sub

Private Sub Form_Load()
bFlag = False
Index = 0
End Sub
回复 支持 反对

使用道具 举报

发表于 2006-6-15 12:51:01 | 显示全部楼层
那是用VB写的吧
bFlag是个开关,用它来离开或者启动循环,通过按钮command1来做的。
回复 支持 反对

使用道具 举报

发表于 2006-6-16 13:21:16 | 显示全部楼层
偶也期待如何实现这样的控制。
回复 支持 反对

使用道具 举报

发表于 2006-6-17 14:18:30 | 显示全部楼层
可以使用横断面,临界区,还有信号灯,C语言有相应的数据结构以及解决方法,仔细翻一下吧
回复 支持 反对

使用道具 举报

发表于 2006-6-20 10:03:52 | 显示全部楼层
/*
* something like this use kill() function send signal
*/
for(;;)/* suppose this is your main loop */
{
        dummy();/* replace your works */
        if (signal(SIGUSR1, yourfunc) == SIG_ERR)/* catch signal */
                err_sys("wrong ");
        pause();
}


/* here define your function to output info which you need */
static void
yourfunc(int signo)
{
        if(signo==SIGUSR1){
                /* this section for your task */
        }else_dump(" *** ");
}
回复 支持 反对

使用道具 举报

发表于 2006-6-20 10:49:07 | 显示全部楼层
一个软件正在运行,我想在任意时刻中止软件运行,并把中止之前测试的结果显示出来!
楼主说的这个意思是用来调试吗? 用gdb不好吗? 运行了之后按ctrl+c 再print 看看各个变量的值
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表