I'm considering writing a manager for background processes --- such as send a 
batch of e-mail or other process that takes a while to finish --- for a web 
system.

I see the challenge here as just writing something that will look like a
very basic UNIX shell --- so I'll call it ``web-api-shell'' from now on.
(``Web'' because it will be used by a web system through some HTTP API.)

This thing has to be flawless. I'm looking for design principles and advice.

I don't know which language I will use, but I'd like to use Racket at
least as a prototype. I am looking at section 15.4 at

https://docs.racket-lang.org/reference/os.html

and I'm not sure it gives me all the control I need. I have a more
lower view of the job --- fork(), execve(), waitpid(), SIGCHLD. But I
suppose Racket handles this much more elegantly that I would in C.

Your advice will be very appreciated.

(*) Where will it run

It will run on GNU systems running the Linux kernel.

(*) My own thoughts

The interface to shell will be through HTTP requests, so this shell will
likely be a web server of some sort. But before I get involved in the
web at all, I need the shell working flawlessly.

So I need a laboratory first. I could write a program that reads some
named pipe on disk to get commands such as ``run this or that'' while I
work. (Later I can write a web server replacing this named-pipe
interface.)

Just like a UNIX shell, this web-api-shell must know all every process
it runs. I suppose the work is essentially fork(), execve() followed by
waitpid().

One concern I have is the following. Is it possible for a process to
simply ``get out of'' the shell? What do I mean by that? A process
that does fork() and puts itself into background would leave the
web-api-shell's control, wouldn't it?

I think I must avoid that. Perhaps I can't let just any process run.
Perhaps the web-api-shell must only offer a few processes carefully
written by myself --- so that I know they won't put themselves in
background. (For instance, I can't let them change PIDs, otherwise I
won't have any idea who they are and that's a mess. I'd love to somehow
restrict system calls such as fork().)

(*) Serialization

I also think this web-api-shell must not be invoked in parallel. So I
guess I must use some queue of requests with no race condition and
pull each request as it comes. Any pointers on how to do this basic
thing with my zero experience?

(*) What is my level of training?

In the past I've studied many parts of

Advanced Programming in the UNIX Environment
W. Richard Stevens

I will definitely have to read it again to get work on this project.
Can you mention any UNIX concepts that are of great relevance for this
project? I don't think I ever got my mind wrapped around things like
sessions, session leaders and so on. Are these concepts relevant to
this application?

Thank you very much.

-- 
You received this message because you are subscribed to the Google Groups 
"Racket Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to racket-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/racket-users/hRIrZF2NP2tUKP8_HV2lLkFr95li_XmhSrzbJCuR1ruwDxy2qyWgC-vREZPyrJMn0oUWj3N6gzSlQ1PBvs_FrwErvOInegt-CQGpPjDG2gw%3D%40protonmail.com.

Reply via email to