记录一个linux进程不运行不崩溃的问题

程序设计为不断连接并断开数据库,使用Linux命令而非API进行连接。在循环运行一段时间后,进程进入无法中断的休眠状态。尝试理解和解决进程中线程交互导致的异常行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序需求是不断连接数据库,并断开,再连接,反复循环。

于是写了个死循环。。。。死循环总是鬼畜的~

而数据库的连接由于某种鬼畜的原因,不能用jdbc,odbc等api,只能使用linux命令连接,不做深究。

然后本菜鸡写了一个如下的程序。

#define THREAD_NUM 101
void GetProcessId(char* str)
{
        system("mysql -utest -ptest -P33001 -h172.17.xxx.xxx>>connect.res");//ip随意
}
void KillConnect()
{
        system("kill -9 $(ps -ef|grep utest|gawk '$0 !~/grep/ {print $2}' |tr -s '\n' ' ')");
}

int main()
{
        while(1){
                pthread_t thread_arr[THREAD_NUM];
                int i=0;
                pthread_create(&thread_arr[i],NULL,(void *)KillConnect,NULL);
                for(i=1;i<THREAD_NUM;i++)
                {
                        pthread_create(&thread_arr[i],NULL,(void *)GetProcessId,NULL);
                }
        }
        return 0;
}

一些代码辣鸡之处不必深究,毕竟只是随便写写的,然后问题来了,在运行一段时间后,程序不死,不崩也不运行,查询进程状态为“无法中断的休眠状态”。

开了各种linux中进程线程的介绍,太多雷同,百度知道中这位大虾很好地解释了中断,然而我依然没联想到该程序的问题。

如果有知道答案的也希望不吝赐教~~

在此做个记录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值