title: Grunt build - Running "concurrent:dist" (concurrent) task Killed
body: <p>For some reason, when doing a <code>grunt build</code> on my VM, it simply dies off in this way:</p>
  
  <pre><code>...
  Running "concurrent:dist" (concurrent) task
  Killed
  </code></pre>
  
  <p>I am not sure what is happening. Seems to be able to build on my local computer, not sure why it doesn't work on my VM. </p>
  
  <p>Any ideas? Thanks!</p>
  
  <hr>
  
  <p><strong>UPDATE</strong></p>
  
  <p><strong><code>grunt build --verbose</code></strong></p>
  
  <pre><code>Running "concurrent:dist" (concurrent) task
  Verifying property concurrent.dist exists in config...OK
  Files: [no src] -&gt; dist
  Killed
  </code></pre>
  
  <p>Here is the Gruntfile.js. </p>
  
  <pre><code>// Generated on 2013-08-13 using generator-angular 0.3.1
  'use strict';
  var LIVERELOAD_PORT = 35729;
  var lrSnippet = require('connect-livereload')({ port: LIVERELOAD_PORT });
  var mountFolder = function (connect, dir) {
    return connect.static(require('path').resolve(dir));
  };
  
  // # Globbing
  // for performance reasons we're only matching one level down:
  // 'test/spec/{,*/}*.js'
  // use this if you want to recursively match all subfolders:
  // 'test/spec/**/*.js'
  
  module.exports = function (grunt) {
    // load all grunt tasks
    require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
  
    // configurable paths
    var yeomanConfig = {
      app: 'app',
      dist: 'dist'
    };
  
    try {
      yeomanConfig.app = require('./bower.json').appPath || yeomanConfig.app;
    } catch (e) {}
  
    grunt.initConfig({
      yeoman: yeomanConfig,
      watch: {
        coffee: {
          files: ['&lt;%= yeoman.app %&gt;/scripts/{,*/}*.coffee'],
          tasks: ['coffee:dist']
        },
        coffeeTest: {
          files: ['test/spec/{,*/}*.coffee'],
          tasks: ['coffee:test']
        },
        livereload: {
          options: {
            livereload: LIVERELOAD_PORT
          },
          files: [
            '&lt;%= yeoman.app %&gt;/{,*/}*.html',
            '{.tmp,&lt;%= yeoman.app %&gt;}/styles/{,*/}*.css',
            '{.tmp,&lt;%= yeoman.app %&gt;}/scripts/{,*/}*.js',
            '&lt;%= yeoman.app %&gt;/img/{,*/}*.{png,jpg,jpeg,gif,webp,svg}'
          ]
        }
      },
      connect: {
        options: {
          port: 9000,
          // Change this to '0.0.0.0' to access the server from outside.
          hostname: 'localhost'
        },
        livereload: {
          options: {
            middleware: function (connect) {
              return [
                lrSnippet,
                mountFolder(connect, '.tmp'),
                mountFolder(connect, yeomanConfig.app)
              ];
            }
          }
        },
        test: {
          options: {
            middleware: function (connect) {
              return [
                mountFolder(connect, '.tmp'),
                mountFolder(connect, 'test')
              ];
            }
          }
        },
        dist: {
          options: {
            middleware: function (connect) {
              return [
                mountFolder(connect, yeomanConfig.dist)
              ];
            }
          }
        }
      },
      open: {
        server: {
          url: 'http://localhost:&lt;%= connect.options.port %&gt;'
        }
      },
      clean: {
  
        dist: {
          files: [{
            dot: true,
            src: [
              '.tmp',
              '&lt;%= yeoman.dist %&gt;/*',
              '!&lt;%= yeoman.dist %&gt;/.git*'
            ]
          }]
        },
        server: '.tmp'
      },
      jshint: {
        options: {
          jshintrc: '.jshintrc'
        },
        all: [
          'Gruntfile.js',
          '&lt;%= yeoman.app %&gt;/scripts/{,*/}*.js'
        ]
      },
      coffee: {
        dist: {
          files: [{
            expand: true,
            cwd: '&lt;%= yeoman.app %&gt;/scripts',
            src: '{,*/}*.coffee',
            dest: '.tmp/scripts',
            ext: '.js'
          }]
        },
        test: {
          files: [{
            expand: true,
            cwd: 'test/spec',
            src: '{,*/}*.coffee',
            dest: '.tmp/spec',
            ext: '.js'
          }]
        }
      },
      // not used since Uglify task does concat,
      // but still available if needed
      /*concat: {
        dist: {}
      },*/
      rev: {
        dist: {
          files: {
            src: [
              '&lt;%= yeoman.dist %&gt;/scripts/{,*/}*.js',
              '&lt;%= yeoman.dist %&gt;/styles/{,*/}*.css',
              '&lt;%= yeoman.dist %&gt;/img/{,*/}*.{png,jpg,jpeg,gif,webp,svg}',
              '&lt;%= yeoman.dist %&gt;/fonts/*'
            ]
          }
        }
      },
      useminPrepare: {
        html: '&lt;%= yeoman.app %&gt;/index.html',
        options: {
          dest: '&lt;%= yeoman.dist %&gt;'
        }
      },
      usemin: {
        html: ['&lt;%= yeoman.dist %&gt;/{,*/}*.html'],
        css: ['&lt;%= yeoman.dist %&gt;/styles/{,*/}*.css'],
        options: {
          dirs: ['&lt;%= yeoman.dist %&gt;']
        }
      },
      imagemin: {
        dist: {
          files: [{
            expand: true,
            cwd: '&lt;%= yeoman.app %&gt;/img',
            src: '{,*/}*.{png,jpg,jpeg}',
            dest: '&lt;%= yeoman.dist %&gt;/img'
          }]
        }
      },
      svgmin: {
        dist: {
          files: [{
            expand: true,
            cwd: '&lt;%= yeoman.app %&gt;/img',
            src: '{,*/}*.svg',
            dest: '&lt;%= yeoman.dist %&gt;/img'
          }]
        }
      },
      cssmin: {
       // By default, your `index.html` &lt;!-- Usemin Block --&gt; will take care of
        // minification. This option is pre-configured if you do not wish to use
        // Usemin blocks.
        // dist: {
        //   files: {
        //     '&lt;%= yeoman.dist %&gt;/styles/main.css': [
        //       '.tmp/styles/{,*/}*.css',
        //       '&lt;%= yeoman.app %&gt;/styles/{,*/}*.css'
        //     ]
        //   }
        // }
      },
      htmlmin: {
        dist: {
          options: {
            /*removeCommentsFromCDATA: true,
            // https://github.com/yeoman/grunt-usemin/issues/44
            //collapseWhitespace: true,
            collapseBooleanAttributes: true,
            removeAttributeQuotes: true,
            removeRedundantAttributes: true,
            useShortDoctype: true,
            removeEmptyAttributes: true,
            removeOptionalTags: true*/
          },
          files: [{
            expand: true,
            cwd: '&lt;%= yeoman.app %&gt;',
            src: ['*.html', 'views/*.html'],
            dest: '&lt;%= yeoman.dist %&gt;'
          }]
        }
      },
      // Put files not handled in other tasks here
      copy: {
        dist: {
          files: [{
            expand: true,
            dot: true,
            cwd: '&lt;%= yeoman.app %&gt;',
            dest: '&lt;%= yeoman.dist %&gt;',
            src: [
              '*.{ico,png,txt}',
              '.htaccess',
              'bower_components/**/*',
              'img/{,*/}*.{gif,webp}',
              'fonts/*'
            ]
          }, {
            expand: true,
            cwd: '.tmp/img',
            dest: '&lt;%= yeoman.dist %&gt;/img',
            src: [
              'generated/*'
            ]
          }]
        }
      },
      concurrent: {
        server: [
          'coffee:dist'
        ],
        test: [
          'coffee'
        ],
        dist: [
          'coffee',
          'imagemin',
          'svgmin',
          'htmlmin'
        ]
      },
      karma: {
        unit: {
          configFile: 'karma.conf.js',
          autoWatch: true
        }
      },
      cdnify: {
        dist: {
          html: ['&lt;%= yeoman.dist %&gt;/*.html']
        }
      },
      ngmin: {
        dist: {
          files: [{
            expand: true,
            cwd: '&lt;%= yeoman.dist %&gt;/scripts',
            src: '*.js',
            dest: '&lt;%= yeoman.dist %&gt;/scripts'
          }]
        }
                       }]
        }
      },
      uglify: {
        dist: {
          files: {
            '&lt;%= yeoman.dist %&gt;/scripts/scripts.js': [
              '&lt;%= yeoman.dist %&gt;/scripts/scripts.js'
            ]
          }
        }
      }
    });
  
    grunt.registerTask('server', function (target) {
      if (target === 'dist') {
        return grunt.task.run(['build', 'open', 'connect:dist:keepalive']);
      }
  
      grunt.task.run([
        'clean:server',
        'concurrent:server',
        'connect:livereload',
        'open',
        'watch'
      ]);
    });
  
    grunt.registerTask('test', [
      'clean:server',
      'concurrent:test',
      'connect:test',
      'karma'
    ]);
  
    grunt.registerTask('build', [
      'clean:dist',
      'useminPrepare',
      'concurrent:dist',
      'concat',
      'copy',
      'cdnify',
      'ngmin',
      'cssmin',
      'uglify',
      'rev',
      'usemin'
    ]);
  
    grunt.registerTask('default', [
      'jshint',
      'test',
      'build'
    ]);
  };
  </code></pre>