Cheers! 

sâmbătă, 23 ianuarie 2016, 19:01:24 UTC+1, Stefan Karpinski a scris:
>
> Great! I'm glad you got it sorted out.
>
> On Fri, Jan 22, 2016 at 6:24 PM, Adrian Salceanu <adrian....@gmail.com 
> <javascript:>> wrote:
>
>> No no, It's perfectly fine, it was my fault. What I haven't realized is 
>> that if I start the server async then my script will finish immediately, 
>> which also terminated the server. It was my responsibility to keep the 
>> whole app alive now. 
>>
>> It works like a charm! 
>>
>>
>> sâmbătă, 23 ianuarie 2016, 00:06:13 UTC+1, Stefan Karpinski a scris:
>>>
>>> The shell works with processes, Julia has tasks where are not the same 
>>> thing...
>>>
>>> On Fri, Jan 22, 2016 at 5:49 PM, Adrian Salceanu <adrian....@gmail.com> 
>>> wrote:
>>>
>>>> The problem seems to that HttpServer can not run @async - it exits 
>>>> immediately. 
>>>>
>>>> ===
>>>>
>>>> using HttpServer
>>>>
>>>> http = HttpHandler() do req::Request, res::Response
>>>>     Response( ismatch(r"^/hello/", req.resource) ? exit(2) : 404 )
>>>> end
>>>>
>>>> server = Server( http )
>>>> run( server, 8001 )  # <--- this works but blocks
>>>> @async run( server, 8001 ) # <--- this exits immediately
>>>>
>>>> ===
>>>>
>>>> It's not necessarily a problem that HttpServer blocks. But what drives 
>>>> me nuts is: if I run 
>>>> $ julia app.jl & 
>>>> in the shell, it works perfectly. The process is placed in the 
>>>> background, the server happily listens to the assigned port, etc. 
>>>>
>>>> Why can't I run the same command from within another julia process and 
>>>> get the same effect? 
>>>>
>>>>
>>>> vineri, 22 ianuarie 2016, 22:40:56 UTC+1, Stefan Karpinski a scris:
>>>>>
>>>>> @spawn runs a command on a (random) worker process. If you want to do 
>>>>> "background" work in the current process, you can use @async:
>>>>>
>>>>> julia> t = @async (sleep(5); rand())
>>>>> Task (runnable) @0x0000000112d746a0
>>>>>
>>>>> julia> wait(t)
>>>>> 0.14543742643271207
>>>>>
>>>>>
>>>>> On Fri, Jan 22, 2016 at 4:33 PM, Adrian Salceanu <adrian....@gmail.com
>>>>> > wrote:
>>>>>
>>>>>> Oh! The ruby analogy made me think about actually spawning the 
>>>>>> detached command! Which produced the desired effect! 
>>>>>>
>>>>>> julia> @spawn run(detach(`ping www.google.com`))
>>>>>>
>>>>>>
>>>>>>
>>>>>> vineri, 22 ianuarie 2016, 22:29:27 UTC+1, Adrian Salceanu a scris:
>>>>>>>
>>>>>>> I guess what I'm looking for is the equivalent of Ruby's 
>>>>>>> Process#spawn
>>>>>>>
>>>>>>> In REPL: 
>>>>>>>
>>>>>>> >> pid = Process.spawn("ping www.google.com", :out => '/dev/null')
>>>>>>> 83210
>>>>>>> >>                         <-- the process is running in the 
>>>>>>> background and control has been returned to the REPL
>>>>>>>
>>>>>>>
>>>>>>> vineri, 22 ianuarie 2016, 22:06:01 UTC+1, Adrian Salceanu a scris:
>>>>>>>>
>>>>>>>> Hi, 
>>>>>>>>
>>>>>>>> I'm hammering at a web app and I'm trying to setup functionality to 
>>>>>>>> monitor the file system for changes and restart/reload the server 
>>>>>>>> automatically so the changes are picked up (I'm using Mux which uses 
>>>>>>>> HttpServer). 
>>>>>>>>
>>>>>>>> The approach I have in mind is: 
>>>>>>>>
>>>>>>>> 1. have a startup script which is run from the command line, 
>>>>>>>> something like: 
>>>>>>>> $ julia -L startup.jl
>>>>>>>>
>>>>>>>> 2. the startup script launches the web app, which starts the web 
>>>>>>>> server. My intention was to run 
>>>>>>>> $ julia -L app.jl 
>>>>>>>> as a command inside startup.jl, detached, and have the startup.jl 
>>>>>>>> script get back control, with app.jl running detached in the 
>>>>>>>> background. 
>>>>>>>>
>>>>>>>> 3. once startup.jl gets back control, it begins monitoring the file 
>>>>>>>> system and when changes are detected, kills the app and relaunches it. 
>>>>>>>>
>>>>>>>> That was the theory. Now, I might be missing something but I can't 
>>>>>>>> find a way to detach the command I'm running and get control back to 
>>>>>>>> the 
>>>>>>>> startup script. And I tried a lot of things! 
>>>>>>>>
>>>>>>>> ===
>>>>>>>>
>>>>>>>> I'm providing simpler example using "ping", which also run 
>>>>>>>> indefinitely, similar to the web server. 
>>>>>>>>
>>>>>>>> julia> run(detach(`ping "www.google.com"`)) # the command is 
>>>>>>>> detached and continues to run after the julia REPL is closed, but at 
>>>>>>>> this 
>>>>>>>> point the REPL does not get control, there's no cursor available in 
>>>>>>>> the REPL
>>>>>>>> PING www.google.com (173.194.45.82): 56 data bytes
>>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=0 ttl=54 time=30.138 ms
>>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=1 ttl=54 time=30.417 ms
>>>>>>>> ... more output ...
>>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=7 ttl=54 time=30.486 ms
>>>>>>>> 64 bytes from 173.194.45.82: icmp_seq=8 ttl=54 time=30.173 ms
>>>>>>>> ^CERROR: InterruptException:                                       
>>>>>>>>                           <---- here I press Ctrl+C and only now the 
>>>>>>>> REPL 
>>>>>>>> gets back the cursor, with the command still running in the background
>>>>>>>>
>>>>>>>> ===
>>>>>>>>
>>>>>>>> Also, related to this, passing "&" into the command to detach does 
>>>>>>>> not work as expected, the "&" is interpreted as argument of the 
>>>>>>>> command. 
>>>>>>>> Not sure if this would help anyway to return control to the startup.jl 
>>>>>>>> script? 
>>>>>>>>
>>>>>>>> julia> run(detach(`ping "www.google.com" &`));
>>>>>>>> usage: ping [-AaDdfnoQqRrv] [-b boundif] [-c count] [-G 
>>>>>>>> sweepmaxsize]
>>>>>>>>             [-g sweepminsize] [-h sweepincrsize] [-i wait] [−k 
>>>>>>>> trafficclass]
>>>>>>>>             [-l preload] [-M mask | time] [-m ttl] [-p pattern]
>>>>>>>>             [-S src_addr] [-s packetsize] [-t timeout][-W waittime] 
>>>>>>>> [-z tos]
>>>>>>>>             host
>>>>>>>>        ping [-AaDdfLnoQqRrv] [-b boundif] [-c count] [-I iface] [-i 
>>>>>>>> wait]
>>>>>>>>             [−k trafficclass] [-l preload] [-M mask | time] [-m 
>>>>>>>> ttl] [-p pattern] [-S src_addr]
>>>>>>>>             [-s packetsize] [-T ttl] [-t timeout] [-W waittime]
>>>>>>>>             [-z tos] mcast-group
>>>>>>>> ERROR: failed process: Process(`ping www.google.com &`, 
>>>>>>>> ProcessExited(64)) [64]
>>>>>>>>  in run at /usr/local/Cellar/julia/0.4.2/lib/julia/sys.dylib
>>>>>>>>
>>>>>>>> ===
>>>>>>>>
>>>>>>>> Thanks
>>>>>>>>
>>>>>>>
>>>>>
>>>
>

Reply via email to