Cannot pause webrick with control-Z after server processes request

When developing a Rails 4.1.6 project, I can start the Webrick server with:

rails s 

Before the server processed any requests, I can:

  • Stop it with the -C control
  • Pause it using control-Z

After the server has processed the request, I can still stop it with control-C, but I can no longer suspend it with control-Z. Input control - Z sends the β€œ^ Z” echo to the terminal, but the server continues to work and processes any requests it receives.

Why can't control-Z pause the server after the server has processed the request?

More details

Server Startup:

 $ rails s Warning: NLS_LANG is not set. fallback to US7ASCII. => Booting WEBrick => Rails 4.1.6 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option) => Ctrl-C to shutdown server [2014-10-28 15:16:09] INFO WEBrick 1.3.1 [2014-10-28 15:16:09] INFO ruby 2.1.2 (2014-05-08) [i686-linux] [2014-10-28 15:16:09] INFO WEBrick::HTTPServer#start: pid=29538 port=3000 

Control-Z before the server processes any requests:

 $ rails s Warning: NLS_LANG is not set. fallback to US7ASCII. => Booting WEBrick => Rails 4.1.6 application starting in development on http://0.0.0.0:3000 => Run `rails server -h` for more startup options => Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option) => Ctrl-C to shutdown server ^Z [1]+ Stopped rails s 

Processing request:

 Started GET "/" for 127.0.0.1 at 2014-10-28 15:18:24 -0700 ActiveRecord::SchemaMigration Load (4.2ms) SELECT "SCHEMA_MIGRATIONS".* FROM "SCHEMA_MIGRATIONS" (69.1ms) SELECT column_name AS name, data_type AS sql_type, data_default, nullable, virtual_column, hidden_column, data_type_owner AS sql_type_owner, DECODE(data_type, 'NUMBER', data_precision, 'FLOAT', data_precision, 'VARCHAR2', DECODE(char_used, 'C', char_length, data_length), 'RAW', DECODE(char_used, 'C', char_length, data_length), 'CHAR', DECODE(char_used, 'C', char_length, data_length), NULL) AS limit, DECODE(data_type, 'NUMBER', data_scale, NULL) AS scale FROM all_tab_cols WHERE owner = 'DOCUMENT_DIRECTOR_DEVELOPMENT' AND table_name = 'SCHEMA_MIGRATIONS' AND hidden_column = 'NO' ORDER BY column_id Processing by IndexController#index as JSON Rendered index/index.json.jbuilder (3.1ms) Completed 200 OK in 10ms (Views: 9.9ms | ActiveRecord: 0.0ms) 

After processing the request, I clicked Control-Z many times, because I mean business:

 ^Z^Z^Z^Z^Z^Z 

Gemfile:

 source 'https://rubygems.org' source 'http://gems:9292' gem 'activerecord-oracle_enhanced-adapter', git: 'https://github.com/wconrad/oracle-enhanced.git', branch: 'better-system-password-entry' gem 'apipie-rails' gem 'capistrano-rails', group: :development gem 'capistrano-rvm' gem 'cucumber-rails', :require => false, group: [:test] gem 'cute_print' gem 'database_cleaner', group: [:development, :test] gem 'factory_girl_rails', group: [:development, :test] gem 'jbuilder' gem 'jsonpath', group: :test gem 'maruku' gem 'newrelic_rpm' gem 'opacs_billing' gem 'opacs_db' gem 'rails' gem 'rails-erd', group: :development gem 'retryable' gem 'rspec-rails', group: [:development, :test] gem 'ruby-oci8' gem 'sass-rails' gem 'sdoc', group: :doc gem 'simplecov', require: false, group: :test gem 'spring', group: :development gem 'versionist' gem 'yard' 

Versions:

  • MRI 2.1.2
  • Rails 4.1.6
  • bash 4.2.37
  • Debian GNU / Linux "wheezy"
+5
source share
1 answer

In one of the comments you wrote in the comments section of your question, you say:

Use case: control-Z, then "bg" to resume the server in the background, then write the log.

I think the problem is to put the server in the background and not in the foreground (using the fg command). If you put the server in the background, the console will no longer be able to stop it until you put it in the foreground, so CTRL-Z will not work. So, I will try the following sequence:

  • rails s
  • CONTROL-Z (program paused)
  • fg (program resumes)
  • CONTROL-Z (does the program stop again?)

If you want to leave your server in the background, then you send it a STOP signal, not by typing CONTROL-Z, but by sending a signal using kill :

 kill -STOP <SERVER_PID> 

or

 kill -s STOP <SERVER_PID> 

(depends on your system).

To resume the process:

 kill -CONT <SERVER_PID> 

or

 kill -s CONT <SERVER_PID> 
+2
source

Source: https://habr.com/ru/post/1205736/


All Articles