This reverts commit 194e3374b8.
Checking the command line for GC roots means that
  $ nix-store --delete $path
will fail because $path is now a root because it's mentioned on the
command line.
		
	
			
		
			
				
	
	
		
			79 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable file
		
	
	
	
	
#! @perl@ -w @perlFlags@
 | 
						|
 | 
						|
use strict;
 | 
						|
use Nix::Utils;
 | 
						|
use Nix::Config;
 | 
						|
 | 
						|
 | 
						|
sub readProc {
 | 
						|
    return unless -d "/proc";
 | 
						|
 | 
						|
    opendir DIR, "/proc" or return;
 | 
						|
 | 
						|
    foreach my $name (readdir DIR) {
 | 
						|
        next unless $name =~ /^\d+$/;
 | 
						|
 | 
						|
        my $process = "/proc/$name";
 | 
						|
 | 
						|
        #print STDERR "=== $process\n";
 | 
						|
 | 
						|
        my $target;
 | 
						|
        print "$target\n" if $target = readlink "$process/exe";
 | 
						|
        print "$target\n" if $target = readlink "$process/cwd";
 | 
						|
 | 
						|
        if (opendir FDS, "$process/fd") {
 | 
						|
            foreach my $name (readdir FDS) {
 | 
						|
                $target = readlink "$process/fd/$name";
 | 
						|
                print "$target\n" if $target && substr($target, 0, 1) eq "/";
 | 
						|
            }
 | 
						|
            closedir FDS;
 | 
						|
        }
 | 
						|
 | 
						|
        if (open MAP, "<$process/maps") {
 | 
						|
            while (<MAP>) {
 | 
						|
                next unless /^ \s* \S+ \s+ \S+ \s+ \S+ \s+ \S+ \s+ \S+ \s+ (\/\S+) \s* $/x;
 | 
						|
                print "$1\n";
 | 
						|
            }
 | 
						|
            close MAP;
 | 
						|
        }
 | 
						|
 | 
						|
        # Get all store paths that appear in the environment of this process.
 | 
						|
        eval {
 | 
						|
            my $env = Nix::Utils::readFile "$process/environ";
 | 
						|
            my @matches = $env =~ /\Q$Nix::Config::storeDir\E\/[0-9a-z]+[0-9a-zA-Z\+\-\._\?=]*/g;
 | 
						|
            print "$_\n" foreach @matches;
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    closedir DIR;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
sub lsof {
 | 
						|
    return unless open LSOF, "lsof -n -w -F n 2> /dev/null |";
 | 
						|
 | 
						|
    while (<LSOF>) {
 | 
						|
        next unless /^n (\/ .*)$/x;
 | 
						|
        print $1, "\n";
 | 
						|
    }
 | 
						|
 | 
						|
    close LSOF;
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
readProc;
 | 
						|
lsof;
 | 
						|
 | 
						|
 | 
						|
sub printFile {
 | 
						|
    my ($fn) = @_;
 | 
						|
    if (-e $fn) {
 | 
						|
        print Nix::Utils::readFile($fn), "\n";
 | 
						|
    }
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
# This is rather NixOS-specific, so it probably shouldn't be here.
 | 
						|
printFile "/proc/sys/kernel/modprobe";
 | 
						|
printFile "/proc/sys/kernel/fbsplash";
 | 
						|
printFile "/proc/sys/kernel/poweroff_cmd";
 |