Problem with external program launch


 
Thread Tools Search this Thread
Top Forums Programming Problem with external program launch
# 1  
Old 02-19-2009
Problem with external program launch

Hello,
in the application i'm writing i need to launch "recordmydesktop" to capture the screen,but i'm having a problem: when the recording stops,and the encoding of the saved file starts,the entire system hangs until the completion of the encoding.This happens if i launch recordmydesktop from my application (simply by clicking a button).

Now what is weird is:if i start recordmydesktop by opening a shell and starting it manually (with my app already running),the encoding doesn't generate any hang.....

The only difference i noticed is the different priority level that recordmydesktop gets when starting from the shell,which is lower than my app's one (i.e. a higher priority number),while when i start it from my app it gets the same of my application,which has a higher priority level.

I tried to start recordmydesktop using the fork and exec approach,giving a lower priority with the "nice" system call,but nothing seems to be better.....
Do you have any advice?
Thanks in advance!
# 2  
Old 02-19-2009
An update: i found out about the "chrt" shell command. It actually did the job:i assigned to recordmydesktop a much lower priority,and now it doesn't hang the system anymore.

But....
1)Is this way to proceed correct? I ask cause changing scheduling policies and priorities does sound "dangerous" if i don't know exactly what's happening

2)Starting recordmydesktop with the fork-exec mechanism makes me feel like i have kinda lost control of it.... I mean,how can i know when this "child" process ends its execution? I could save,for example,the pid of it and later check if a process with that pid is active...but to me it doesnt sound like a good way to control it....

Any advice?
Thanks in advance!
# 3  
Old 02-20-2009
As a rule, UNIX systems will accept anything reducing its own priority with the glee of something being given free money, but demand root of things that would increase their priority. It is never dangerous to give a process a lower priority unless the process itself is something time-critical; burning CDs at low priority would mean more coasters than usual for example. But a low-priority gzip would just work slower if other things were competing for time. See the nice and renice commands for other traditional methods of changing a process' priority.

I'm wondering though, what priority is it being reduced from? Did it have ludicriously high priority in the first place, to halt your system like that? What user was your GUI running it as?

Lastly, I must wonder precisely by which mechanism this recordmydesktop process was ever started if not fork/exec Smilie

Last edited by Corona688; 02-20-2009 at 02:54 AM..
# 4  
Old 02-20-2009
Many thanks for your reply Smilie

Quote:
I'm wondering though, what priority is it being reduced from? Did it have ludicriously high priority in the first place, to halt your system like that? What user was your GUI running it as?
The main app's priority is -2 with a ROUND_RR scheduling policy,and it must be run by root user,or it won't work (i cant change this).If i remember well,it's the highest priority i can see using the "top" command,so this explains why my system halted (does it?).

Quote:
Lastly, I must wonder precisely by which mechanism this recordmydesktop process was ever started if not fork/exec
Smilie Before,i started it calling the "system" function,but after some readings i found out that it's not a suggested way to run external programs,for some problems related to the shell it's based on,so i passed to fork/exec.
# 5  
Old 02-20-2009
fork() is the only way to create a new process, so system() ultimately uses it anyway. But yes, it creates and runs a shell in the process, which is a bit messy and has a performance cost. This means fork()/exec() is actually far more direct than system(), not the other way around. You can find out when a child has finished with the waitpid() call.

-2 is actually a lower priority, not a higher one; the higher the number, the higher the priority. What priority and scheduler did you modify it to to get it to function, exactly?
# 6  
Old 02-20-2009
Quote:
-2 is actually a lower priority, not a higher one; the higher the number, the higher the priority. What priority and scheduler did you modify it to to get it to function, exactly?
Oh i'm such a newbie Smilie I got confused with the niceness concept,which has a reversed logic (higher number <=> higher niceness <=> lower priority)....

About your question:i honestly don't know very well how the original programmer has set the program's priority,but,using the "chrt -p" command i found out it has a SCHED_RR policy with a priority 0.
I have then used the chrt command to set the child process' policy to SCHED_OTHER (which forces me to use a 0 priority).So i guess that what made it work is the fact that i downgraded the child process from real time to normal (but i'm not sure...can you confirm that?)

Besides,i confess i'm beginning to be a tad confused....After reading your reply i read some more internet resources,finding out about static and dynamic priority,and about their ranges...but also finding some contraddictory informations...see for example www.csd.uwo.ca/courses/CS3305a/Lectures/casestudies.ppt and ATAD #21 - Linux process priority range A Tip A Day [:: ATAD ::] ....One says that static priority ranges from 0 to 99,the other from -20 to 19....

Lastly,what does the PR value i can see in the "top" command output mean?

Thank you so much for you help,i do appreciate it Smilie
# 7  
Old 02-21-2009
Quote:
Originally Posted by Zipi
Oh i'm such a newbie Smilie I got confused with the niceness concept,which has a reversed logic (higher number <=> higher niceness <=> lower priority)....
... It may be I got it exactly backwards. 'top' on my system shows a few kernel things which I expected to have high priority but may actually have had low priority. Argh. I'll need to do more research into priority myself since there seems to be two seperate kinds. Smilie

I'd suggest changing the priority to 0 without changing the scheduler.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Having trouble using expect to launch vpn program

Hello all. I am a linux and linux scripting newbie so please forgive my ignorance. I have been tasked to write what I thought should be a pretty simple script that does the following: 1) Loads our forticlient ssl vpn command line client 2) sends the vpn password to the client Pretty... (2 Replies)
Discussion started by: wblakenc
2 Replies

2. Shell Programming and Scripting

Launch a text program inside a konsole at startup

Hi ULFers, I am trying to setup a (very) simple startup script on a centos 6.4 computer and it kind of failed.... Here are the details : As said just above the computer setup is running a CentOS 6.4 x64, on this computer a vncserver is automatically started (by a chkconfig vncserver on), i... (1 Reply)
Discussion started by: pierpier
1 Replies

3. Shell Programming and Scripting

Input keyboard keys upon program launch

Hey guys, first post! I want to write a script that will wait 1 second and then input the keys CTRL+ALT+J to the application i just opened. The program is dosbox, and thay key combination starts video recording :) I have no idea how to program this, can anyone help please? thanks in advance! (2 Replies)
Discussion started by: brunobliss
2 Replies

4. Shell Programming and Scripting

Perl script timer on program launch

So I am attempting to get a short but complex perl script to be able to time out an application that I will launch from a command line. The terminal I use is MKS C SHELL and I am having trouble doing the a job spawn that will launch the application and keep time on it. I know you could do this... (1 Reply)
Discussion started by: vas28r13
1 Replies

5. Shell Programming and Scripting

Launch a windows program from perl script

Hi i wanted to know if any one can give me an example on how to launch a windows program in a perl script. I wanted to open the nmap software on my computer with a perl script, i heard this can be done with the system function. Would the function be in this format: $text =... (1 Reply)
Discussion started by: kingbp
1 Replies

6. Shell Programming and Scripting

Shell Script to launch C program

Hi there, im new too shell scripting and was wondering if it is possible to create a shell script to take in a variable and load a c program. My C program is a file monitor, and is started by using the terminal and using to following code ./monitor FileToBeMonitored is it possible to have... (12 Replies)
Discussion started by: gazmcc182
12 Replies

7. Shell Programming and Scripting

BASH: how to launch a program with parameters

Hi, I'm a pretty big fan of BASH scripting. I've got a bunch I use for random things and lately a couple issues have been plaguing me. Both are somewhat related, in that they deal with filenames with spaces and "escaped" characters and with launching a program with command line arguements... (5 Replies)
Discussion started by: TinCanFury
5 Replies

8. Programming

launch an executable from a C++ program

Hi everybody! Could you please tell me how can I launch an executable from a C++ (on unix) program? thanks in advance! (2 Replies)
Discussion started by: nadiamihu
2 Replies

9. Shell Programming and Scripting

Passing value to an external program problem...

This code is in my 'case' statement and it all else works fine. The problem I have is that the value in 'procno' is not passed on to the external program (fireit). It is passing all zeros instead of the actual process number. By the time I get to this case statement, I know the "Number" and... (1 Reply)
Discussion started by: giannicello
1 Replies

10. UNIX for Dummies Questions & Answers

how to launch program though telnet

I have launched telnet on nt and have connected to a unix server, I'm trying to run a program on the unix server which will launch a gui, but when I try to launch it I get the message "display not set\n" "By default set it to 0.0" I can sit down at the unix machine and launch the program with... (3 Replies)
Discussion started by: cbachman
3 Replies
Login or Register to Ask a Question