<br><br>
<div class="gmail_quote">On Tue, Sep 18, 2012 at 9:32 AM, Amit Gupta <span dir="ltr">&lt;<a href="mailto:gupta.v.amit@gmail.com" target="_blank">gupta.v.amit@gmail.com</a>&gt;</span> wrote:<br>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">Hi All, 
<div><br></div>
<div>I had a question about manipulating process state information in the kernel and am curious about the right way to go about it.</div>
<div>(I&#39;m just messing around with some stuff to try and understand the kernel better). I had 2 questions:</div>
<div><br></div>
<div>1. I&#39;m trying to create a process in the TASK_INTERRUPTIBLE state in the kernel. Since do_fork() creates a process/task that is ready to be scheduled, I was thinking what might be a good way to pull it off the runqueue/stop its execution after do_fork() returns?</div>

<div><br></div></blockquote>
<div> </div>
<div> </div>
<div>Assuming you do the change in the do_fork() so that new process moves to sleep queue</div>
<div>Whatever new process created made to TASK_INTERRUPTIBLE in the do fork, who will wakeup the new process. </div>
<div>If you just type &quot;ls&quot; commnad also it does not work as ls command calls  fork() + exec().  So your shell fork() and </div>
<div>moves to sleep queue. Similarly lot of fork+exec activities happen in the system will all move to sleep queue.  Many</div>
<div>deamons running on the system may do fork() or fork + exec() will stop working. </div>
<div> </div>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">
<div>2.I&#39;m curious if someone can explain the correct way to use the  &quot;set_task_state()&quot; macro. Its implementation just seems to boil down to an assignment to the appropriate member of the task_struct. The question I had in mind was, what if the process is already running? Is it safe to do it? Don&#39;t we need to acquire some sort of lock before we manipulate a task_struct ?</div>
</blockquote>
<div> </div>
<div>set_task_state() macro is used for portability reason. Earlier code shows direct manipulaation fo task_struct-&gt;state. </div>
<div>When you execute wait_interruptile() family calls, it is the running process in kernel  executes set_task_state() .</div>
<div> </div>
<div> </div>
<div> </div>
<blockquote style="BORDER-LEFT:#ccc 1px solid;MARGIN:0px 0px 0px 0.8ex;PADDING-LEFT:1ex" class="gmail_quote">
<div><br></div>
<div>3. I would also be interested to read the correct way to use task_lock() that locks on alloc_lock field of the task_struct. What exactly is this lock for and does acquiring it/or any other lock in the task_struct cause the process to be remoted from the runqueue?</div>

<div><br></div>
<div><br></div>
<div>Would appreciate any pointers to appropriate code/reading or any explanation.</div>
<div>Thanks,</div><span class="HOEnZb"><font color="#888888">
<div>-- </div>
<div>Amit Gupta<br><br></div></font></span><br>_______________________________________________<br>Kernelnewbies mailing list<br><a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br><a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
<br></blockquote></div><br>