LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Software (https://www.linuxquestions.org/questions/linux-software-2/)
-   -   clone task will not give up processor (https://www.linuxquestions.org/questions/linux-software-2/clone-task-will-not-give-up-processor-557513/)

StandardImpulsePower 05-29-2007 01:52 PM

clone task will not give up processor
 
I am attempting to clone multiple tasks in the code below. However, when executing the first cloned task holds the processor forever. If I remove the while(1) in TaskTester, then each task is generated, but only after the previous task has completed. This is running TS-Linux or Debian Linux on an ARM. What am I doing wrong? (I added the sched_yield() but it didn't make any difference.




#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sched.h>
#include "ct.h"

int TaskTester(void * dummy)
{

if(dummy != NULL)
{
while(1)
{
// do something here
write(STDERR_FILENO,"Task ",5);
write(STDERR_FILENO,(char *)dummy,1);
write(STDERR_FILENO," reporting\n",12);
sched_yield();
// sched_getscheduler();
sleep(10);
}
write(STDERR_FILENO,"Task ",5);
write(STDERR_FILENO,(char *)dummy,1);
write(STDERR_FILENO," exiting\n",12);
}
return(*((int *)dummy));
}

int main(void)
{
void *stack, *none;
char stack_mem[100];
int task_count;
pid_t pid;
char temp = 'A';

stack = (void *)&stack_mem[0];
none = (void*)&temp;
for(task_count = 0; task_count < TASK_COUNT; task_count++)
{
temp = (char)('A' + task_count);
if( (pid = clone((void*)TaskTester((void *)none), (void*)0L,0,0)) == 0)
{
write(STDERR_FILENO,"ERROR: clone failed\n",21);
exit(1);
}
else
{
write(STDERR_FILENO,"Parent task sees creation pid\n",26);
fprintf(stderr,"Parent sees child pid = %ld\n",(long)pid);
}
}

return(0);
}


All times are GMT -5. The time now is 12:22 AM.