Getting pid of a process!!
Hi to all,
I would like to know if there's a way to get the pid of a process by using it's name. Also, how can I know of the processes that are running and their pids? Warm regards, Visham |
Code:
ps ax | grep [process name] the first number on the left is the pid |
On Slackware, there is a /sbin/pidof which returns the pid of a program.
|
Hi,
many thx for the reply... But what command do I use for getting the pid of a process, which i know by name, in a C program? Warm regards, Visham |
Here's one way, a rewriting of Solaris pgrep/pkill commands to Linux:
http://cvs.sourceforge.net/viewcvs.p...19&view=markup |
Hi,
I found sth called pidof...it's a shell script command that returns the pid of a process when you know its name. So in order to use it this command in a C program, we can use the system command: void main() { ... system("pidof -s name_of_process"); ... } Thx to all for ur input.. Warm regards, Visham |
Calling a shell script from a C program instead of using the C APIs defeats some or all of the interest of writing a C program vs a shell script.
Also, if you still want to use pidof instead of what I sent you (pgrep C source code), you'd rather use popen() instead of system() to get pidof output. |
Hi,
I did look at the pgrep.c file...but i'm araid i don't know hw to include it in my code..i'm actualy modifying iptables kernel code, where I need to find the pid of another process. I found it easier to write just one line in the existing code rather than having to paste the source code of pgrep.c. i'm using RH9 by the way. Can you suggest me a way of how to use prep.c while causing minimal intrusion in the existing iptables kernel code? I can't use makefiles.. Warm regards, Visham |
Hi,
I did look at the pgrep.c file...but i'm araid i don't know hw to include it in my code..i'm actualy modifying iptables kernel code, where I need to find the pid of another process. I found it easier to write just one line in the existing code rather than having to paste the source code of pgrep.c. i'm using RH9 by the way. Can you suggest me a way of how to use prep.c while causing minimal intrusion in the existing iptables kernel code? I can't use makefiles.. Also, can you tell me why you suggest the use of popen(). CAn you give me an example of how to use it? Warm regards, Visham |
Are you really wanting to call a shell script from kernel code ???
This is close to impossible, and reusing pgrep code in such a situation is at least challenging here too. Kernel code cannot make use of system calls or libc, although part of libc can be implemented in the kernel itself. |
open-heart surgery using a chainsaw
;) |
use getpidbyname()
Hi
i'm also new to linux but if you are using c and want to know pid of a process then you can use system call getpidbyname(). |
I doubt any operating system provides a "getpidbyname()" system call.
|
Hi to all,
I'm trying to call a .c program (Prog1.c) from another .c program (Prog2.c). Prog1.c is actually part of the iptables kernel code. I'm only modifying the file. I'll need to recompile the kernel. Prog2.c is a userspace program that i will write entirely. Prog1.c will send a signal to Prog2.c every time a packet passes through the code of Prog1.c. But in order to send the signal to Prog2.c, Prog1.c needs to know the pid of Prog2.c and then send it. Do you think it' the best way to do so... Warm regards, Visham |
Quote:
Hint: http://www.kernelnewbies.org/faq/index.php3#library |
Hi to all,
No i don't want a two way communication between Prog1.c and Prog2.c. Prog1.c just sends the signal and it continues it's execution in parallel, without having to wait for Prog2.c to finish. Prog1.c kind of sends the signal and forgets about it. One thing though..is it possible to send a signal from Prog1.c and not have Prog1.c waits for the return. Can we have a signal that does not return to the program that generated and sent it? I want to do sth like this: Prog1.c issues the signal and then continues with the remaining statements. Is this possible? How can I do that? Any input will be very much appreciated.. Warm regards, Visham |
You want a communication (kill) from the kernel (Prog1) to a userland process (Prog2).
You want too the kernel (Prog1) to call a userland process (pidof) to retrieve a process ID. You have to think carefully on how you want to achieve both of these tasks, as you are on your own when writing kernel code, no libraries, no (g)libc are available and no bugs are allowed ... |
Absolutely correct..for the signal from kernel to Prog2.c, i'll use kill() in the kernel code and sigaction in Prog2.c to catch it.
For the retrieval of the pid of Prog2.c by the kernel program, i can use global variables to store the value of getpid() in Prog2.c and then access it from kernel code. One question though..how come you have no libraries, no (g)libc are available when doing kernel coding? Then how are we supposed to write programs? I didn't know abt this issue and would be grateful if you could enlighten me on this. Also if you have good sources of info on this and kernel coding, do let me have them. Warm regards, Visham |
Quote:
You are not going to call kill() from the kernel, because you have no access to libraries and system calls Quote:
A global variable is global to all functions of a process, but not between processes, and even less between a userland process and the kernel. Quote:
Quote:
Quote:
|
Hi,
>You are not going to call kill() from the kernel, because you have no access to libraries and system calls I intend to add a few lines of code to a function in iptables (kernel code). Do you mean to say that I will not be able to use the kill() function there? If no, what do you suggest me to do about what I want? >Well, this is even harder, how will the kernel access these "global variables" ? A global variable is global to all functions of a process, but not between processes, and even less between a userland process and the kernel. Some one told me that we can declare global variable in /etc/profiles. Variables defined there can be accessed from anywhere - both kernel space and userspace code. To read/ write to that variable, i will have to employ semaphores i believe. >I already post a link to a site you seem to have overlooked. No, i didn't overlook it..it's actually a website that i had used in the past but had forgotten about lately..thx for reminding me. Warm regards, Visham |
;) J
|
Quote:
Quote:
Actually, my best suggestion would be to discourage you to start such a project which seems unreasonably overcomplicated. Kernel programming is a job for skilled veterans. Quote:
|
First of, many many thx for taking the time to explain all this to me..otherwise i would have been losing so much time on it.
One thing though..how does iptables kernelspace code iteract with iptables userspace code? Does it use the procfs facility? And are there no instances in Linux where the kernel communicates with a userspace program (in terms of error messages, interrupts...)? Warm regards, Visham |
Quote:
Quote:
Quote:
|
Quote:
Quote:
Regards, Visham |
Quote:
Quote:
|
the command "top" without quotes gets the processes and proabably their pid too. You can push control + escape to get a thing like task manager.
|
Hi,
When i was saying that the kernelspace program has to send a signal to the userspace program, i didn't actually had in mind the use of signals or other system calls at first. Now, thx to you, I know it's not possible. I just wanted the kernelspace program to tell the userspace program to start its execution. This is the part I don't know how to do. This is where the problem lies. Quote:
What do you think? To fakie_flip: I don't think 'top' will work in kernelspace. Thx anyways.. Warm regards, Visham |
Quote:
You can have the kernel sending something through a device driver (/proc for example). If a process reads that piece of information, you have a communication from the kernel to a process. |
Yes..we can try to do that..
Do you have idea abt wat we can send? Do have any example of how to do it? Pls do let me have it. Warm regards, Visham |
No, but I'm sure there are tons of /proc programming examples available on the net, try google ...
|
Ok..many thx to all who have contributed to this thread, esp jlliagre
Warm regards, Visham |
Quote:
# pstree # top and I like the first reply: ps ax | grep [any part of the process name] Landis. |
Quote:
|
What is the problem you trying to solve?
There appears to be no need for a kernel module for this as http://linux.die.net/man/3/libipq Appears to solve most of what you are describing. |
All times are GMT -5. The time now is 08:13 PM. |